私は、単一のトランザクションで多数のデータベース更新を実行する興味深い状況に対処しています。これらの更新が何らかの理由で失敗した場合、トランザクションはロールバックされます。IDbTransactionロールバックタイムアウト
IDbTransaction transaction
try {
transaction = connection.BeginTransaction();
// do lots of updates (where at least one fails)
transaction.Commit();
} catch {
transaction.Rollback(); // results in a timeout exception
} finally {
connection.Dispose();
}
私は上記のコードは、一般的にトランザクション内のデータベース更新を実行するための標準テンプレートと考えられていると信じています。
私が直面している問題は、transaction.Rollback()がSQL Serverに発行されている間も、クライアント上でタイムアウトしていることです。
ロールバックコマンドを発行するタイムアウトとそのコマンドを実行して完了するまでのタイムアウトを区別する方法はありますか?事前に
おかげで、 ベン
私はtransaction.Rollback()メソッド呼び出しの文書化されていないタイムアウト例外(その他)をキャッチすることができますが、正確にどのように私は、ロールバックが発生したかどうかを知ることができます確かに。 2つのシナリオでタイムアウト例外が発生すると思います。ロールバックコマンドがSQL Serverに発行されなかった場合は最初のもの、ロールバックコマンドが発行された場合は2番目のものですが、あまりにも時間がかかりました... –
私は上記の例のさらなる実装を見てきました。ロールバック・メソッド呼び出し。ここで、ロールバック・プロシージャ自体によってスローされた例外をキャッチします。これはロールバックできない場合はSQL例外、特定のトランザクション関連のエラーに対してはタイムアウトまたは無効な操作と考える例外があります。 –