(帮助)的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(); 
    } 
}