2009-03-24 12 views
3

EDIT:1つのデータベースにしかアクセスしていますが、DTCトランザクションISが作成されています。私はそれをDTC Transaction List GUI(コンポーネントサービスプラグイン)で見ることができます。どうしてこれなの?トランザクションスコープまたはIDbTransaction

1つのデータベースに対してトランザクション(いくつかの挿入コマンド)を実行する必要があります。

TransactionScopeまたはIDbTransaction(connection.BeginTransaction)を使用する必要がありますか?

TransactionScopeはもっと新しいようですが、2フェーズコミットに使用する必要がありますか?それは複数の接続を検出した場合

おかげ

答えて

4

TransactionScopeのは、唯一の分散トランザクションにエスカレートします。つまり、TransactionScopeはローカルトランザクションのBeginTransactionと同じくらい軽量であり、TransactionScopeは使いやすくなっています。

3

単一の接続を使用し、TransactionScope中にクローズして再オープンしない限り、分散トランザクションに昇格するべきではありません。マシン上でDTCサービスを実行していない場合は、昇格しようとすると例外がスローされます。 DTCが実行されている場合、若干の一時停止を除いて、プロモーションの賢明ではありません。

3

大部分のケースでは、特に「使用」ブロックと組み合わせて、TransactionScopeを使用する方がはるかに使い勝手が良いです。

SQL Server 2000を使用している場合、注意してください。TransactionScopeではうまく動作せず、常に分散トランザクションにエスカレーションします。

詳細はthis linkを参照してください。

関連する問題