2009-06-01 16 views
12

私は、推奨されるTransactionScopeの使用のように機能するが、周囲トランザクションではなく周囲接続を持つコードをいくつか持っています。TransactionScopeを既存の接続で使用する方法はありますか?

既存の接続でTransactionScopeオブジェクトを使用する方法はありますか、またはこの目的のために.Netフレームワークに代替手段がありますか?

答えて

25

実際には1つの方法があります。

connection.EnlistTransaction(Transaction.Current) 

は、それが動作し、それが必要でない場合は、分散にトランザクションを促進doesntの(逆にどのような文書は述べています)

HTH

4

TransactionScopeへの接続を登録するには、接続文字列に'Enlist=true'を指定し、そのTransactionScopeオブジェクトのスコープ内で接続を開く必要があります。

SqlConnection.BeginTransactionは、既存の接続で使用できます。

更新:あなたはこのようBeginTransactionを使用することができます。より多くの研究の後

using (SqlConnection connection = new SqlConnection(connectionString)) 
{ 
    connection.Open(); 

    SqlCommand command = connection.CreateCommand(); 
    SqlTransaction transaction; 

    // Start a local transaction. 
    transaction = connection.BeginTransaction("SampleTransaction"); 

    // Must assign both transaction object and connection 
    // to Command object for a pending local transaction 
    command.Connection = connection; 
    command.Transaction = transaction; 

    ... 
    ... 

} 
+0

事は、接続がTransactionScopeのインスタンス化の前に開かれています。したがって、私の質問の理由。 –

+0

@Mitch、connection.BeginTransaction( "SampleTransaction")は、どのようなシナリオでも分散トランザクション(DTC)に昇格しませんか?もしそうなら、そのシナリオは何ですか? – Baig

3

、私の質問への答えはであることが判明:

いいえ、接続の後に開かれる必要がありますTransactionScopeオブジェクトがインスタンス化されます。

関連する問題