TransactionScope TransactionScope TransactionScope TransactionScope Class

Tanım

Kod bloğu işlem yapar.Makes a code block transactional. Bu sınıf devralınamaz.This class cannot be inherited.

public ref class TransactionScope sealed : IDisposable
public sealed class TransactionScope : IDisposable
type TransactionScope = class
    interface IDisposable
Public NotInheritable Class TransactionScope
Implements IDisposable
Devralma
TransactionScopeTransactionScopeTransactionScopeTransactionScope
Uygulamalar

Örnekler

Aşağıdaki örnek, bir işleme katılacak bir kod TransactionScope bloğunu tanımlamak için sınıfının nasıl kullanılacağını gösterir.The following example demonstrates how to use the TransactionScope class to define a block of code to participate in a transaction.

// This function takes arguments for 2 connection strings and commands to create a transaction 
// involving two SQL Servers. It returns a value > 0 if the transaction is committed, 0 if the 
// transaction is rolled back. To test this code, you can connect to two different databases 
// on the same server by altering the connection string, or to another 3rd party RDBMS by 
// altering the code in the connection2 code block.
static public int CreateTransactionScope(
    string connectString1, string connectString2,
    string commandText1, string commandText2)
{
    // Initialize the return value to zero and create a StringWriter to display results.
    int returnValue = 0;
    System.IO.StringWriter writer = new System.IO.StringWriter();

    try
    {
        // Create the TransactionScope to execute the commands, guaranteeing
        // that both commands can commit or roll back as a single unit of work.
        using (TransactionScope scope = new TransactionScope())
        {
            using (SqlConnection connection1 = new SqlConnection(connectString1))
            {
                // Opening the connection automatically enlists it in the 
                // TransactionScope as a lightweight transaction.
                connection1.Open();

                // Create the SqlCommand object and execute the first command.
                SqlCommand command1 = new SqlCommand(commandText1, connection1);
                returnValue = command1.ExecuteNonQuery();
                writer.WriteLine("Rows to be affected by command1: {0}", returnValue);

                // If you get here, this means that command1 succeeded. By nesting
                // the using block for connection2 inside that of connection1, you
                // conserve server and network resources as connection2 is opened
                // only when there is a chance that the transaction can commit.   
                using (SqlConnection connection2 = new SqlConnection(connectString2))
                {
                    // The transaction is escalated to a full distributed
                    // transaction when connection2 is opened.
                    connection2.Open();

                    // Execute the second command in the second database.
                    returnValue = 0;
                    SqlCommand command2 = new SqlCommand(commandText2, connection2);
                    returnValue = command2.ExecuteNonQuery();
                    writer.WriteLine("Rows to be affected by command2: {0}", returnValue);
                }
            }

            // The Complete method commits the transaction. If an exception has been thrown,
            // Complete is not  called and the transaction is rolled back.
            scope.Complete();

        }
       
    }
    catch (TransactionAbortedException ex)
    {
        writer.WriteLine("TransactionAbortedException Message: {0}", ex.Message);
    }

    // Display messages.
    Console.WriteLine(writer.ToString());

    return returnValue;
}
'  This function takes arguments for 2 connection strings and commands to create a transaction 
'  involving two SQL Servers. It returns a value > 0 if the transaction is committed, 0 if the 
'  transaction is rolled back. To test this code, you can connect to two different databases 
'  on the same server by altering the connection string, or to another 3rd party RDBMS  
'  by altering the code in the connection2 code block.
Public Function CreateTransactionScope( _
  ByVal connectString1 As String, ByVal connectString2 As String, _
  ByVal commandText1 As String, ByVal commandText2 As String) As Integer

    ' Initialize the return value to zero and create a StringWriter to display results.
    Dim returnValue As Integer = 0
    Dim writer As System.IO.StringWriter = New System.IO.StringWriter

    Try
    ' Create the TransactionScope to execute the commands, guaranteeing
    '  that both commands can commit or roll back as a single unit of work.
        Using scope As New TransactionScope()
            Using connection1 As New SqlConnection(connectString1)
                ' Opening the connection automatically enlists it in the 
                ' TransactionScope as a lightweight transaction.
                connection1.Open()

                ' Create the SqlCommand object and execute the first command.
                Dim command1 As SqlCommand = New SqlCommand(commandText1, connection1)
                returnValue = command1.ExecuteNonQuery()
                writer.WriteLine("Rows to be affected by command1: {0}", returnValue)

                ' If you get here, this means that command1 succeeded. By nesting
                ' the using block for connection2 inside that of connection1, you
                ' conserve server and network resources as connection2 is opened
                ' only when there is a chance that the transaction can commit.   
                Using connection2 As New SqlConnection(connectString2)
                    ' The transaction is escalated to a full distributed
                    ' transaction when connection2 is opened.
                    connection2.Open()

                    ' Execute the second command in the second database.
                    returnValue = 0
                    Dim command2 As SqlCommand = New SqlCommand(commandText2, connection2)
                    returnValue = command2.ExecuteNonQuery()
                    writer.WriteLine("Rows to be affected by command2: {0}", returnValue)
                End Using
            End Using

        ' The Complete method commits the transaction. If an exception has been thrown,
        ' Complete is called and the transaction is rolled back.
        scope.Complete()
        End Using
    Catch ex As TransactionAbortedException
        writer.WriteLine("TransactionAbortedException Message: {0}", ex.Message)
    End Try

    ' Display messages.
    Console.WriteLine(writer.ToString())

    Return returnValue
End Function

Açıklamalar

Altyapı, Transaction sınıfı temel alan açık bir programlama modeli ve TransactionScope sınıf kullanan örtük bir programlama modeli sağlar ve bu da işlemleri altyapı tarafından otomatik olarak yönetilir. System.TransactionsThe System.Transactions infrastructure provides both an explicit programming model based on the Transaction class, as well as an implicit programming model using the TransactionScope class, in which transactions are automatically managed by the infrastructure.

Önemli

Çevresel işlem bağlamının sizin için otomatik olarak yönetilmesi için TransactionScope sınıfını kullanarak örtük işlemler oluşturmanızı öneririz.We recommend that you create implicit transactions using the TransactionScope class, so that the ambient transaction context is automatically managed for you. Aynı işlemin birden çok işlev TransactionScope çağrısı DependentTransaction veya birden çok iş parçacığı çağrısı genelinde kullanılmasını gerektiren uygulamalar için ve sınıfını da kullanmanız gerekir.You should also use the TransactionScope and DependentTransaction class for applications that require the use of the same transaction across multiple function calls or multiple thread calls. Bu model hakkında daha fazla bilgi için, Işlem kapsamı kullanarak örtük Işlem uygulama konusuna bakın.For more information on this model, see the Implementing An Implicit Transaction Using Transaction Scope topic. İşlemsel uygulama yazma hakkında daha fazla bilgi için bkz. Işlem uygulaması yazma.For more information on writing a transactional application, see Writing A Transactional Application.

İfade tarafından bir TransactionScope örneğini örnekledikten sonra, işlem Yöneticisi hangi hareketin katılacağı belirler. newUpon instantiating a TransactionScope by the new statement, the transaction manager determines which transaction to participate in. Belirlendikten sonra, kapsam her zaman bu işleme katılır.Once determined, the scope always participates in that transaction. Karar iki etkene dayanır: bir ortam işleminin mevcut olup olmadığı ve oluşturucudaki TransactionScopeOption parametre değeri.The decision is based on two factors: whether an ambient transaction is present and the value of the TransactionScopeOption parameter in the constructor. Çevresel işlem, kodunuzun yürütüldüğü işlemdir.The ambient transaction is the transaction your code executes in. Transaction Sınıfının statik Transaction.Current özelliğini çağırarak çevresel işleme bir başvuru elde edebilirsiniz.You can obtain a reference to the ambient transaction by calling the static Transaction.Current property of the Transaction class. Bu parametrenin nasıl kullanıldığı hakkında daha fazla bilgi için, Işlem kapsamı kullanarak örtük bir Işlem uygulama konusunun "Işlem akış Yönetimi" bölümüne bakın.For more information on how this parameter is used, see the "Transaction Flow Management" section of the Implementing An Implicit Transaction Using Transaction Scope topic.

İşlem kapsamında bir özel durum oluşursa (diğer bir deyişle, TransactionScope nesnenin başlatılması ve Dispose yönteminin çağrılması arasında), kapsamın katıldığı işlem devam edemiyor.If no exception occurs within the transaction scope (that is, between the initialization of the TransactionScope object and the calling of its Dispose method), then the transaction in which the scope participates is allowed to proceed. İşlem kapsamında bir özel durum oluşursa, katıldığı işlem geri alınacaktır.If an exception does occur within the transaction scope, the transaction in which it participates will be rolled back.

Uygulamanız bir işlemde gerçekleştirmek istediği tüm işleri tamamladığında, işlem yöneticisinin işlemi yürütmek için kabul edilebilir olduğunu bildirmek Complete üzere yöntemi yalnızca bir kez çağırmanız gerekir.When your application completes all work it wants to perform in a transaction, you should call the Complete method only once to inform that transaction manager that it is acceptable to commit the transaction. Bu yöntemin çağırlamaması işlemi iptal eder.Failing to call this method aborts the transaction.

Dispose Yöntemine yapılan bir çağrı, işlem kapsamının sonunu işaretler.A call to the Dispose method marks the end of the transaction scope. Bu yöntemi çağırdıktan sonra oluşan özel durumlar işlemi etkilemeyebilir.Exceptions that occur after calling this method may not affect the transaction.

Bir kapsamın Current içindeki değerini değiştirirseniz, çağrıldığında bir özel durum Dispose oluşturulur.If you modify the value of Current inside a scope, an exception is thrown when Dispose is called. Ancak, kapsamın sonunda, önceki değer geri yüklenir.However, at the end of the scope, the previous value is restored. Ayrıca, işlemi oluşturan bir işlem Dispose kapsamı Current içinde ' i çağırırsanız, işlem kapsamın sonunda iptal edilir.In addition, if you call Dispose on Current inside a transaction scope that created the transaction, the transaction aborts at the end of the scope.

Oluşturucular

TransactionScope() TransactionScope() TransactionScope() TransactionScope()

Yeni bir örneğini başlatır TransactionScope sınıfı.Initializes a new instance of the TransactionScope class.

TransactionScope(Transaction) TransactionScope(Transaction) TransactionScope(Transaction) TransactionScope(Transaction)

TransactionScope Sınıfın yeni bir örneğini başlatır ve belirtilen işlemi çevresel işlem olarak ayarlar, böylece kapsam içinde gerçekleştirilen işlemsel çalışma bu işlemi kullanır.Initializes a new instance of the TransactionScope class and sets the specified transaction as the ambient transaction, so that transactional work done inside the scope uses this transaction.

TransactionScope(Transaction, TimeSpan) TransactionScope(Transaction, TimeSpan) TransactionScope(Transaction, TimeSpan) TransactionScope(Transaction, TimeSpan)

Belirtilen zaman aşımı değeri ile TransactionScope sınıfın yeni bir örneğini başlatır ve belirtilen işlemi çevresel işlem olarak ayarlar, böylece kapsam içinde gerçekleştirilen işlemsel çalışma bu işlemi kullanır.Initializes a new instance of the TransactionScope class with the specified timeout value, and sets the specified transaction as the ambient transaction, so that transactional work done inside the scope uses this transaction.

TransactionScope(Transaction, TimeSpan, EnterpriseServicesInteropOption) TransactionScope(Transaction, TimeSpan, EnterpriseServicesInteropOption) TransactionScope(Transaction, TimeSpan, EnterpriseServicesInteropOption) TransactionScope(Transaction, TimeSpan, EnterpriseServicesInteropOption)

Belirtilen zaman aşımı değeri ve com+ TransactionScope birlikte çalışabilirlik gereksinimleriyle birlikte sınıfının yeni bir örneğini başlatır ve ortam işlemi olarak belirtilen işlemi, bu işlemi kapsam içinde gerçekleştirilen işlem çalışması bu işlemi kullanacak şekilde ayarlar .Initializes a new instance of the TransactionScope class with the specified timeout value and COM+ interoperability requirements, and sets the specified transaction as the ambient transaction, so that transactional work done inside the scope uses this transaction.

TransactionScope(Transaction, TimeSpan, TransactionScopeAsyncFlowOption) TransactionScope(Transaction, TimeSpan, TransactionScopeAsyncFlowOption) TransactionScope(Transaction, TimeSpan, TransactionScopeAsyncFlowOption) TransactionScope(Transaction, TimeSpan, TransactionScopeAsyncFlowOption)

[.NET Framework 4.5.1 ve sonraki sürümlerde desteklenir][Supported in the .NET Framework 4.5.1 and later versions] Belirtilen zaman aşımı değeri ile TransactionScope sınıfın yeni bir örneğini başlatır ve belirtilen işlemi çevresel işlem olarak ayarlar, böylece kapsam içinde gerçekleştirilen işlemsel çalışma bu işlemi kullanır.Initializes a new instance of the TransactionScope class with the specified timeout value, and sets the specified transaction as the ambient transaction, so that transactional work done inside the scope uses this transaction.

TransactionScope(Transaction, TransactionScopeAsyncFlowOption) TransactionScope(Transaction, TransactionScopeAsyncFlowOption) TransactionScope(Transaction, TransactionScopeAsyncFlowOption) TransactionScope(Transaction, TransactionScopeAsyncFlowOption)

[.NET Framework 4.5.1 ve sonraki sürümlerde desteklenir][Supported in the .NET Framework 4.5.1 and later versions] TransactionScope Sınıfın yeni bir örneğini başlatır ve belirtilen işlemi çevresel işlem olarak ayarlar, böylece kapsam içinde gerçekleştirilen işlemsel çalışma bu işlemi kullanır.Initializes a new instance of the TransactionScope class and sets the specified transaction as the ambient transaction, so that transactional work done inside the scope uses this transaction.

TransactionScope(TransactionScopeAsyncFlowOption) TransactionScope(TransactionScopeAsyncFlowOption) TransactionScope(TransactionScopeAsyncFlowOption) TransactionScope(TransactionScopeAsyncFlowOption)

Belirtilen zaman uyumsuz akış seçeneğiyle TransactionScope sınıfının yeni bir örneğini başlatır.Initializes a new instance of the TransactionScope class with the specified asynchronous flow option.

TransactionScope(TransactionScopeOption) TransactionScope(TransactionScopeOption) TransactionScope(TransactionScopeOption) TransactionScope(TransactionScopeOption)

Belirtilen gereksinimlere sahip bir TransactionScope sınıfın yeni bir örneğini başlatır.Initializes a new instance of the TransactionScope class with the specified requirements.

TransactionScope(TransactionScopeOption, TimeSpan) TransactionScope(TransactionScopeOption, TimeSpan) TransactionScope(TransactionScopeOption, TimeSpan) TransactionScope(TransactionScopeOption, TimeSpan)

Belirtilen zaman aşımı değeri ve gereksinimleriyle TransactionScope sınıfının yeni bir örneğini başlatır.Initializes a new instance of the TransactionScope class with the specified timeout value and requirements.

TransactionScope(TransactionScopeOption, TimeSpan, TransactionScopeAsyncFlowOption) TransactionScope(TransactionScopeOption, TimeSpan, TransactionScopeAsyncFlowOption) TransactionScope(TransactionScopeOption, TimeSpan, TransactionScopeAsyncFlowOption) TransactionScope(TransactionScopeOption, TimeSpan, TransactionScopeAsyncFlowOption)

Belirtilen zaman aşımı değeri, Gereksinimler TransactionScope ve zaman uyumsuz akış seçeneğiyle sınıfının yeni bir örneğini başlatır.Initializes a new instance of the TransactionScope class with the specified timeout value, requirements, and asynchronous flow option.

TransactionScope(TransactionScopeOption, TransactionOptions) TransactionScope(TransactionScopeOption, TransactionOptions) TransactionScope(TransactionScopeOption, TransactionOptions) TransactionScope(TransactionScopeOption, TransactionOptions)

Belirtilen gereksinimlere sahip bir TransactionScope sınıfın yeni bir örneğini başlatır.Initializes a new instance of the TransactionScope class with the specified requirements.

TransactionScope(TransactionScopeOption, TransactionOptions, EnterpriseServicesInteropOption) TransactionScope(TransactionScopeOption, TransactionOptions, EnterpriseServicesInteropOption) TransactionScope(TransactionScopeOption, TransactionOptions, EnterpriseServicesInteropOption) TransactionScope(TransactionScopeOption, TransactionOptions, EnterpriseServicesInteropOption)

Belirtilen kapsam ve com+ birlikte çalışabilirlik TransactionScope gereksinimleriyle ve işlem seçenekleriyle sınıfının yeni bir örneğini başlatır.Initializes a new instance of the TransactionScope class with the specified scope and COM+ interoperability requirements, and transaction options.

TransactionScope(TransactionScopeOption, TransactionOptions, TransactionScopeAsyncFlowOption) TransactionScope(TransactionScopeOption, TransactionOptions, TransactionScopeAsyncFlowOption) TransactionScope(TransactionScopeOption, TransactionOptions, TransactionScopeAsyncFlowOption) TransactionScope(TransactionScopeOption, TransactionOptions, TransactionScopeAsyncFlowOption)

[.NET Framework 4.5.1 ve sonraki sürümlerde desteklenir][Supported in the .NET Framework 4.5.1 and later versions] Belirtilen gereksinimler ve zaman uyumsuz akış TransactionScope seçeneğiyle sınıfının yeni bir örneğini başlatır.Initializes a new instance of the TransactionScope class with the specified requirements and asynchronous flow option.

TransactionScope(TransactionScopeOption, TransactionScopeAsyncFlowOption) TransactionScope(TransactionScopeOption, TransactionScopeAsyncFlowOption) TransactionScope(TransactionScopeOption, TransactionScopeAsyncFlowOption) TransactionScope(TransactionScopeOption, TransactionScopeAsyncFlowOption)

Belirtilen gereksinimler ve zaman uyumsuz akış TransactionScope seçeneğiyle sınıfının yeni bir örneğini başlatır.Initializes a new instance of the TransactionScope class with the specified requirements and asynchronous flow option.

Yöntemler

Complete() Complete() Complete() Complete()

Kapsam içindeki tüm işlemlerin başarıyla tamamlandığını gösterir.Indicates that all operations within the scope are completed successfully.

Dispose() Dispose() Dispose() Dispose()

İşlem kapsamını sonlandırır.Ends the transaction scope.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Belirtilen nesnenin geçerli nesneyle eşit olup olmadığını belirler.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Varsayılan karma işlevi olarak işlev görür.Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

Type Geçerli örneği alır.Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Geçerli Objectbir basit kopyasını oluşturur.Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

Geçerli nesneyi temsil eden bir dize döndürür.Returns a string that represents the current object.

(Inherited from Object)

Şunlara uygulanır

İş Parçacığı Güvenliği

Bu güvenli iş parçacığı türüdür.This type is thread safe.

Ayrıca bkz.