このシナリオを説明できる機関はありますか..
データにエラーがある場合は、1 つの挿入または更新、または for ループを使用しないコマンドを使用して、コミットとロールバックを実行できることを知っています。
しかし、私の疑問は、forループに挿入コマンドまたは更新コマンドがある場合、いつコミットまたはロールバックを行うかということです。
このシナリオを説明できる機関はありますか..
データにエラーがある場合は、1 つの挿入または更新、または for ループを使用しないコマンドを使用して、コミットとロールバックを実行できることを知っています。
しかし、私の疑問は、forループに挿入コマンドまたは更新コマンドがある場合、いつコミットまたはロールバックを行うかということです。
あなたはこのようなものを書くことができます
//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番目のケースでは、必要な部分(挿入/更新部分)のみのトランザクション内になります。