C# (帮助)SqlTransaction循环
需要得到有关SqlTransaction的解释和澄清 因此,根据下面的代码,情况是这样的C# (帮助)SqlTransaction循环,c#,ado.net,C#,Ado.net,需要得到有关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_I
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();
}
SqlConnection con=newsqlconnection(GetConnectionString());
con.Open();
SqlTransaction trans=con.BeginTransaction();
bool-IsSave=false;
for(int i=0;i
问题是,我应该每个循环提交一次,还是让它循环然后提交事务?事务是SQL将不同语句绑定到一个原子操作中的一种方式,即全部或全无。如果一条语句失败,则事务作用域中以前的所有语句都将回滚,执行事务中的下一个语句的非 事务可以以两种不同的方式之一结束—提交或回滚。只能提交或回滚一次 因此,要将这些信息转换为对您的问题的直接回答,请使用
trans.Commit()代码>必须位于循环之后。如果单个保存操作失败,事务将回滚,您将退出该方法。只有当它们全部成功时,您才提交事务
顺便说一句,只要有可能,您应该使用语句将实现IDisposable
接口的类的所有实例包装在中:
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();
}
}
使用(var-con=new-SqlConnection(GetConnectionString()))
{
con.Open();
使用(var trans=con.BeginTransaction())
{
bool-IsSave=false;
for(int i=0;i