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 循环完成,这也可能包含业务逻辑,但在第二种情况下,您将在事务中仅针对所需的部分(插入/更新部分)

于 2012-08-11T07:35:30.620 回答