1

このシナリオを説明できる機関はありますか..

データにエラーがある場合は、1 つの挿入または更新、または for ループを使用しないコマンドを使用して、コミットとロールバックを実行できることを知っています。

しかし、私の疑問は、forループに挿入コマンドまたは更新コマンドがある場合、いつコミットまたはロールバックを行うかということです。

4

1 に答える 1

2

あなたはこのようなものを書くことができます

//Start transaction here
bool isSuccess = true;
for (int i = 0; i < 100; i++)
{
    try
    {
        //your Insert/update Query
    }
    catch (Exception ex)
    {
        isSuccess = false;
        break;
    }
}

if (isSuccess)
{
    //Commit transaction 
}
else
{
   //Roll back transaction
}

しかし、私の提案は別のアプローチを使用することです

for (int i = 0; i < 100; i++)
{
    //Build your Insert/Update query here
    //Note : do not execute it yet
}

//Start transaction
try
{
    //Execute the query here
    //Commit transaction 
}
catch(Exception ex)
{
   //Roll back transaction
}

最初のケースでは、forループ全体が完了するまでテーブルをロックします。これには、ビジネスロジックも含まれる場合がありますが、2番目のケースでは、必要な部分(挿入/更新部分)のみのトランザクション内になります。

于 2012-08-11T07:35:30.620 に答える