1

短い: transaction.Commit() の呼び出し後、トランザクションがコミットされなかったかのように、次の操作が失敗します。

詳細: データベースへの書き込みクエリを実行するスレッドがあり、その一部はトランザクションにカプセル化されています。しばらくしてより重い負荷を実行すると、トランザクションのコミット後の操作が失敗し、トランザクションが進行中であることを示すエラーが発生する状況が発生します。コミット後に実行されたアクションに応じて、次のエラーのいずれかが表示されます。

次の操作は「トランザクションの開始:

...接続は並列トランザクションをサポートしていません...

次の操作は挿入/更新/削除です

ExecuteNonQuery では、コマンドに割り当てられた接続が保留中のローカル トランザクションにある場合、コマンドにトランザクションが必要です。コマンドのトランザクション プロパティが初期化されていません。

デバッガーを使用して Sql Connection オブジェクトを調べると、親が null に設定された 'sqlInnerTransaction' オブジェクトが含まれていることがわかります。「Commit」の呼び出しがエラーなしで正常に完了したことはわかっています。
.net 4.0、SQL Server 2008 R2 SP2 の実行

4

1 に答える 1

6

このメッセージを見ると:

接続は並列トランザクションをサポートしていません

複数のスレッドで単一の接続オブジェクトを使用しているのだろうか?

接続はスレッドセーフではありません。それらが作成されたスレッドでのみ使用する必要があります。

于 2012-12-03T16:37:18.740 に答える