有错误,Transaction怎么也不rollback?

问题描述

用的是微软的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或者已经提交了事务

时间: 2024-09-17 06:15:35

有错误,Transaction怎么也不rollback?的相关文章

用SQL Server处理数据层错误

开发人员在努力做到妥善地处理意外,这样用户就不用担心天书般的系统错误信息.出于这个原因,异常处理是每个.NET应用程序的一个标准部分.Try/catch块让你能够捕捉异常并从该点控制应用程序的执行.与数据库进行交互操作的时候会发生很多错误,但是很多开发人员都不知道如何处理数据库层的错误.本文我们将探讨如何利用SQLServer和T-SQL来处理你数据库代码里的错误. 处理T-SQL里的错误 SQLServer的SQL对话让你能够轻松地处理可能会在存储进程.函数里发生的非致命错误,但是并不是所有的

MySQL replication partial transaction

title: MySQL · mysql · MySQL replication partial transaction author: 张远 replication 概述 目前MySQL支持的replication方式多种多样 普通的master-slave 异步replication 半同步的semi-sync replication 支持多通道的group replication和double binlog 如果按连接协议来区分,又可以分为 非GTID模式,通过binlog文件名和文件的偏

MySQL · 源码分析 · MySQL replication partial transaction

replication 概述 目前MySQL支持的replication方式多种多样 普通的master-slave 异步replication 半同步的semi-sync replication 支持多通道的group replication和double binlog 如果按连接协议来区分,又可以分为 非GTID模式,通过binlog文件名和文件的偏移来决定replication位点信息 GTID模式,通过GTID信息来决定replication位点信息 如果按apply binglog的方

user rollbacks 与 transaction rollbacks 的区别

  论坛上有个帖子 SQL>  select name,value from v$sysstat where name in ('user commits','user rollbacks'); NAME                                                                  VALUE---------------------------------------------------------------- ----------us

SQL SERVER事务处理

server|事务处理 事务定义:事务是单个的工作单元.如果某一事务成功,则在该事务中进行的所有数据更改均会提交,成为数据库中的永久组成部分.如果事务遇到错误且必须取消或回滚,则所有数据更改均被清除.事务三种运行模式:自动提交事务每条单独的语句都是一个事务.显式事务每个事务均以 BEGIN TRANSACTION 语句显式开始,以 COMMIT 或 ROLLBACK 语句显式结束.隐性事务在前一个事务完成时新事务隐式启动,但每个事务仍以 COMMIT 或 ROLLBACK 语句显式完成.事务操作

心得共享:Oracle经验技巧集锦

oracle|技巧|心得 1.删除表空间 DROP TABLESPACE TableSpaceName [INCLUDING CONTENTS [AND DATAFILES]] 2.删除用户 DROP USER User_Name CASCADE 3.删除表的注意事项 在删除一个表中的全部数据时,须使用TRUNCATE TABLE 表名;因为用DROP TABLE,DELETE * FROM 表名时,TABLESPACE表空间该表的占用空间并未释放,反复几次DROP,DELETE操作后,该TAB

Oracle经验技巧集

oracle|技巧  Oracle经验技巧集1.删除表空间    DROP TABLESPACE TableSpaceName [INCLUDING CONTENTS [AND DATAFILES]]2.删除用户    DROP USER User_Name CASCADE3.删除表的注意事项    在删除一个表中的全部数据时,须使用TRUNCATE TABLE 表名;因为用DROP TABLE,DELETE * FROM 表名时,TABLESPACE表空间该表的占用空间并未释放,反复几次DRO

精通数据库系列之入门-技巧篇5

技巧|数据|数据库 大型数据库设计原则 作者:思索 整理:南海 一个好的数据库产品不等于就有一个好的应用系统,如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能.一般来讲,在一个MIS系统分析.设计.测试和试运行阶段,因为数据量较小,设计人员和测试人员往往只注意到功能的实现,而很难注意到性能的薄弱之处,等到系统投入实际运行一段时间后,才发现系统的性能在降低,这时再来考虑提高系统性能则要花费更多的人力物力,而整个系统也不可避免的形成了

Oracle数据库系统使用经验六则

oracle|数据|数据库 1.having 子句的用法 having 子句对 group by 子句所确定的行组进行控制,having 子句条件中只允许涉及常量,聚组函数或group by 子句中的列. 2.外部联接"+"的用法 外部联接"+"按其在"="的左边或右边分左联接和右联接.若不带"+"运算符的表中的一个行不直接匹配于带"+"预算符的表中的任何行,则前者的行与后者中的一个空行相匹配并被返回.若二