Aracılığıyla paylaş


System.Transactions kullanma

The System.Transactions namespace is new in the Microsoft .NET Framework version 2.0.Bu ado ile tam olarak tümleşiktir yeni bir hareket çerçeve sağlar.net ve SQL Server ortak dil çalışma zamanı (clr) tümleştirme.The System.Transactions.TransactionScope class makes a code block transactional by implicitly enlisting connections in a distributed transaction.Çağırması gerekir Complete yöntem kodu, sonunda blok tarafından işaretlenmiş TransactionScope.The Dispose method is invoked when program execution leaves a code block, causing the transaction to be discontinued if the Complete method is not called.Kod kapsam bırakmayı neden olan bir özel durum oluşturuldu, hareket edilecek kabul edilir.

Kullanması önerilir bir using blok, emin olmak için Dispose yöntem çağrılır TransactionScope nesnesi, using Blok çıkıldı.Hatası yürütme veya işlemleri geri almak almak önemli ölçüde düşmesine performans çünkü için varsayılan saat aşımı saat TransactionScope olan bir dakika.Kullanırsanız, bir using deyim, gerekir gerçekleştirdiğiniz tüm iş bir Try engellemek ve açıkça çağrı Dispose yöntem , Finally blok.

İçinde bir özel durum oluşursa, TransactionScope, hareketi tutarsız olarak işaretlenir ve terk.Toplu ne zaman geri TransactionScope atıldı.Hiçbir özel durum oluşursa, hareketleri katılan yürütme.

TransactionScope yalnızca yerel ve uzak veri kaynakları ve dış kaynak yöneticilerinin erişildiği zaman kullanılmalıdır.Bu, çünkü TransactionScope her zaman yükseltmek, olsa bile, yalnızca içinde kullanılıyorsa bu hareketlere neden oluyorbir içerik bağlantısı.

Not

The TransactionScope class creates a transaction with a System.Transactions.Transaction.IsolationLevel of Serializable by default.Azaltmayı göz önüne almak isteyebileceğiniz uygulamanıza bağlı olarak, yalıtım düzey yüksek çekişmesi uygulamanızdaki önlemek için.

Not

Yalnızca güncelleştirmeler, ekler, gerçekleştirmek ve bunlar önemli veritabanı kaynaklarını tükettiği için siler içinde dağıtılmış işlemler uzak sunucularda öneririz.Yerel sunucu üzerinde gerçekleştirilecek işlemi alınacaksa bir dağıtılmış işlem gerekli ve yerel değil hareket yeterli.select deyimleri olabilir kilit gereksiz yere kaynak veritabanı ve bazı senaryolarda onu seçer için hareketleri kullanmak gerekli olabilir.Diğer işlem temelli kaynak yöneticileri kapsadığı sürece hareket kapsam dışında herhangi bir veritabanı olmayan çalışma yapılmalıdır.İstisna kapsamındaki işlemin işlem yapılıyor, dan önlese de TransactionScope kod değişiklikleri geri alma hareketi kapsam dışında yaptığı için sınıf vardır gerektiren bir hüküm yoktur.Bazı gerçekleştirmeniz gerekiyorsa eylem , transeylem olan geri alındı, kendi yazması gerekiyor System.Transactions.IEnlistmentNotification arabirim ve trans içinde açıkça listelemeeylem.

Örnek

Çalışmak için System.Transactions, olması gerekir, bir başvuru için System.Transactions.dll dosyası.

Aşağıdaki kod, iki farklı örnekleri karşı yükseltilebilir bir hareket oluşturmak gösterilmiştir SQL Server.Bu örnekleri farklı iki tarafından temsil edilen System.Data.SqlClient.SqlConnection içinde kaydırılan nesneleri, bir TransactionScope blok.Kod oluşturur TransactionScope blok ile bir using deyim içinde otomatik olarak kaydeder ilk bağlantı açar ve TransactionScope.Hareket başlangıçta, tam dağıtılmış işlem değil gibi hafif bir hareket olarak kayıtlı.Kod (hangi kısaltma için atlanmış) koşullu mantık varlığını varsayar.Yalnızca gerektiğinde, ikinci bağlantı açar, içinde kaydetme TransactionScope.Bir bağlantı açıldığında, hareketin tam dağıtılmış işlem otomatik olarak yükseltilir.Sonra kodunu çağırır TransactionScope.Complete, hangi tamamlar hareket.Çıkarken iki bağlantı kodu bırakan using deyimleri için bağlantılar.The TransactionScope.Dispose method for the TransactionScope is automatically called at the termination of the using block for the TransactionScope.Bir özel durum herhangi bir aşamada oluşturuldu, TransactionScope blok, Complete mu denilen ve top dağıtılmış işlem olacak ne zaman geri almak almak TransactionScope atıldı.

Visual Basic

Using transScope As New TransactionScope()
    Using connection1 As New SqlConnection(connectString1)
        ' Opening connection1 automatically enlists it in the 
        ' TransactionScope as a lightweight transaction.
        connection1.Open()

        ' Do work in the first connection.

        ' Assumes conditional logic in place where the second
        ' connection will only be opened as needed.
        Using connection2 As New SqlConnection(connectString2)
            ' Open the second connection, which enlists the 
            ' second connection and promotes the transaction to
            ' a full distributed transaction.
            connection2.Open()

            ' Do work in the second connection.

        End Using
    End Using

    ' Commit the transaction.
    transScope.Complete()
End Using

C#

using (TransactionScope transScope = new TransactionScope())
{
    using (SqlConnection connection1 = new 
       SqlConnection(connectString1))
    {
        // Opening connection1 automatically enlists it in the 
        // TransactionScope as a lightweight transaction.
        connection1.Open();

        // Do work in the first connection.

        // Assumes conditional logic in place where the second
        // connection will only be opened as needed.
        using (SqlConnection connection2 = new 
            SqlConnection(connectString2))
        {
            // Open the second connection, which enlists the 
            // second connection and promotes the transaction to
            // a full distributed transaction. 
            connection2.Open();

            // Do work in the second connection.
        }
    }
    //  The Complete method commits the transaction.
    transScope.Complete();
}

Ayrıca bkz.

Kavramlar