1

複数の SQL コマンドを実行し、挿入が成功したかどうかを判断するブール値を返す C# でメソッドを作成しています。私の問題は、このコマンドを「オールオアナッシング」コマンドとして実行したいということです。これは、3 つの異なるコマンドを実行する必要があり、3 番目のコマンドが正しく実行されない場合、最初の 2 つのコマンドの変更がコミットされないことを意味します。SQLServerでこれを行うにはどうすればよいですか?

4

2 に答える 2

1

C# から 3 つのコマンドを実行する場合:

SqlTransaction tran = connection.BeginTransaction();
try
{
   ...exec first command and get result...
   ...exec second commmand and get result...
   ...exec third command and get result...
   if (!firstResult || !secondResult || !thirdResult)
      throw new Exception();

   tran.Commit();
}
catch
{
   tran.Rollback();
}

ストアド プロシージャを呼び出して SQL サーバーで 3 つのコマンドを実行する場合は、次を使用します。

BEGIN TRANSACTION

cmd1
cmd2
cmd3

IF @Success = 1 THEN
  COMMIT TRANSATION
ELSE
  ROLLBACK TRANSACTION

SQL で try..catch ブロックを使用して例外をキャッチし、エラーが発生した場合にトランザクションをロールバックすることもできます。

于 2013-04-16T20:19:06.220 に答える
0

多くの SQL クエリ (多くの場合、INSERTS、UPDATES、または DELETES) を 1 つの作業単位にグループ化するトランザクションを検索している場合、クエリを BEGIN TRAN (最初) と COMMIT TRAN (最後) で囲む必要があります。 SQL サーバー トランザクション

于 2013-04-16T20:19:53.357 に答える