问题描述
用的是微软的EnterpriseLibrary,仿照官网上的例子,如下:boolhasError=false;using(DbConnectionconn=db.CreateConnection()){conn.Open();DbTransactiontransation=conn.BeginTransaction();try{for(inti=0;i<InfoList.Count;i++){info=(Info)InfoList[i];//记录在DB中已经存在if(IsChildExists(info.ChildNo)){//判断是否结束boolisFinished=IsFinished(info.ParentNo);//没有结束if(!isFinished){//更新DBupdateSql=MakeUpdateSql();dbCmd=db.GetSqlStringCommand(updateSql);AddParams(db,dbCmd,importInfo,fixedDataArr);db.ExecuteNonQuery(dbCmd);}else{//已经结束,业务错误发生hasError=true;break;}}else{//记录不存在,插入insertSql=MakeInsertSql();dbCmd=db.GetSqlStringCommand(insertSql);//为参数设值AddParams(db,dbCmd,importInfo,fixedDataArr);db.ExecuteNonQuery(dbCmd);}}//业务错误if(hasError){transation.Rollback();}else{transation.Commit();}}catch(Exceptionex){transation.Rollback();}conn.Close();}
现在的问题是,即使hasError的值是true,执行了transation.Rollback();之前插入的数据也没有被rollback请教一下,会是什么原因呢?谢谢!
解决方案
解决方案二:
需要把Transaction加到Command上dbCmd=db.GetSqlStringCommand(updateSql);dbCmd.Transaction=transation;dbCmd=db.GetSqlStringCommand(insertSql);dbCmd.Transaction=transation;
解决方案三:
dbCmd.transation=transation;
解决方案四:
楼上应该正解了不行就在finnally中rollback
解决方案五:
dbCmd.Transaction=transation;
解决方案六:
db.transation=transation;
解决方案七:
TOmapserver找你的做法,出现了异常Thetransactioniseithernotassociatedwiththecurrentconnectionorhasbeencompleted.
解决方案八:
Transaction必须关联Command事务才有用......
解决方案九:
多谢各位回答1.我参考了微软的EnterpriseLibrary的官网的例子:http://msdn.microsoft.com/en-us/library/cc309210.aspx这里面没有位command设值事务2,按照大家提示的做法:抛出异常:Thetransactioniseithernotassociatedwiththecurrentconnectionorhasbeencompleted.
解决方案十:
引用6楼zenkill的回复:
TOmapserver找你的做法,出现了异常Thetransactioniseithernotassociatedwiththecurrentconnectionorhasbeencompleted.
没有关联到connection或者已经提交了事务