任何人都可以解释这种情况..
我知道使用一个插入或更新或任何没有 for 循环的命令,如果数据中有任何错误,我们可以进行提交和回滚。
但我怀疑我是否在 for 循环中有插入命令或更新命令,那么何时提交或回滚。
任何人都可以解释这种情况..
我知道使用一个插入或更新或任何没有 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 循环完成,这也可能包含业务逻辑,但在第二种情况下,您将在事务中仅针对所需的部分(插入/更新部分)