0

A)テーブルに行を挿入し、B)結果の Identity 値を別のテーブルへのいくつかの挿入で使用する方法があります。パート B のロジックがなんらかの理由で失敗した場合、パート B とパート A の両方のすべての挿入をロールバックする必要があります。これについてはトランザクションがうまくいかないことはかなり確信していますが、別の方法で説得されても構わないと思っています。A と B の両方を実行するメソッドの呼び出しを処理する「メイン」メソッドがあり、try-catch で囲まれています。私が疑問に思っているのは、メイン メソッドのキャッチからロールバック機能を実行するメソッドを呼び出し、ロールバック メソッドで何かが失敗した場合、ロールバック メソッドでキャッチされた例外 (ログに記録したい) がスタック トレースを一掃するかどうかです。メインメソッドでキャッチされた例外の(または他の何か)?コード例:

public class DoSomeStuff
{
    public void MainMethod(...)
    {
         int identity;
         try
         {
              identity = DoFirstInsert(...);
              DoSubsequentInserts(identity, ....);
         }
         catch
         {
              RollbackStuff(identity);
              throw;
         }
    }

    void RollbackStuff(int identity)
    {
         try
         {
              //Do database stuff to rollback inserts
         }
         catch(exception ex)
         {
              //Log rollback error, DO NOT THROW
              //Will this wipe out the exception caught in MainMethod()?
         }
    }
}

前もって感謝します。

4

2 に答える 2

3

トランザクションが機能するはずです。ID 列を返すトランザクションを含め、すべての挿入を 1 つのトランザクションにラップします。

于 2009-07-27T15:24:44.333 に答える