2012-02-21 9 views
0

私はTransactionScope内から複数のストアドプロシージャを実行しています。 SqlCommandを実行する方法はありますか?(ただし、usingステートメントのスコープ内にありますが)トランザクションから削除しますか?TransactionScope内での非トランザクション実行

1つのトランザクション内にある必要がある前後に実行されるSqlCommandsがあります。

答えて

1

あなたが「偽」に設定「Enlist」接続パラメータと新しいSqlConnectionオブジェクトのインスタンスを作成することができます

SqlConnectionStringBuilder csBuilder = new SqlConnectionStringBuilder(existingCon.ConnectionString); 
csBuilder.Enlist = false; 
SqlConnection newConnection = new SqlConnection(csBuilder.ConnectionString);  
SqlCommand commandNotInTheTx = newConnection.CreateCommand(); 
+0

また、特定の接続で常に周囲トランザクションを回避する必要があることがわかっている場合は、接続文字列に 'Enlist = false'を設定して、余分なコーディングや接続管理を避けることができます。このリンクは.NET 1.1用ですが、入隊部分はまだ正確ですが、私は信じています:http://msdn.microsoft.com/en-us/library/aa720033(v=vs.71).aspx –

2

あなたは別の接続を開いてそこであなたのステートメントを実行する必要があります。しかし、このステートメントは、コミットされていないトランザクションからの変更は表示されません。

+0

文はすでに別々の接続を持っていますが、それはのTransactionScopeのusingステートメントであるため。 NETは、同じトランザクション内に配置しようとします。どのようにトランザクションを使用しない接続を作成するか考えていますか? – DJCasey

0

IIRCでは、トランザクション参加では、接続が同じ接続プールのメンバーになる必要があります。 2番目の接続に若干異なる接続文字列を使用すると(おそらく別のApplication Nameを使用すると)、参加を迂回する可能性があります。

誤って分散トランザクションとDTCを使用しないように注意してください。

1

新しいスコープを作成し、Supressオプションを指定する必要があります。

関連する問題