(帮助)的SqlTransaction循环
问题描述:
需要得到解释和澄清有关的SqlTransaction(S)(帮助)的SqlTransaction循环
所以的情况下,基于以下
SqlConnection con = new SqlConnection(GetConnectionString());
con.Open();
SqlTransaction trans = con.BeginTransaction();
bool IsSave = false;
for(int i = 0; i < obj.Count; i++)
{
IsSave = Some_Insert_Method_On_Other_Class(obj[i], con, trans);
if (!IsSave)
{
trans.Rollback();
return;
}
trans.Commit();
}
代码的问题是,我应该每圈提交一次或者让它循环然后提交事务?
答
事务是SQL将不同语句绑定到单个原子操作中的方式 - 意思是全部或全部 - 如果一个语句失败,则事务范围中的所有前面的语句都回滚,而不是下一个语句交易被执行。
事务可以以两种不同的方式之一结束 - 它可以是提交的,也可以是回滚的。它只能被提交或回滚一次。
因此,要将该信息翻译成对您的问题的直接回答,trans.Commit();
必须在循环之后。如果单个保存操作失败,则事务将回滚并退出该方法。只有当它们全部成功时,您才会执行交易。
顺便说一句,只要有可能,就应该换一个实现IDisposable
接口在using
声明类的所有实例:
using(var con = new SqlConnection(GetConnectionString()))
{
con.Open();
using(var trans = con.BeginTransaction())
{
bool IsSave = false;
for(int i = 0; i < obj.Count; i++)
{
IsSave = Some_Insert_Method_On_Other_Class(obj[i], con, trans);
if (!IsSave)
{
trans.Rollback();
return;
}
}
trans.Commit();
}
}