问题描述
我在用c#asp.net更新IBMAS400(DB400)数据库的数据时写了下面的code。数据的表示,更新等等完全没有问题,可以被执行,但是就是Transaction不起作用。大家看了就会明白,这些code所执行的更新,最后应该一定会被Rollback掉的。但是不知道为什么。数据就是会被正常的更新,Rollback不起作用,而且整个code里不会出现任何error。哪位大侠能指点一二,不胜感激。-------------------------------------------------------------usingSystem.Data.OleDb;privatestringtest(){OleDbConnectioncon=newOleDbConnection();OleDbCommandcmd=newOleDbCommand();try{con.ConnectionString="Provider=IBMDA400;DataSource=XXXXX;UserID=XXXXX;Password=XXXXX";con.Open();OleDbTransactiontran=con.BeginTransaction();cmd=con.CreateCommand();cmd.CommandText=SQL;cmd.Transaction=tran;cmd.ExecuteNonQuery();tran.Rollback();←------一定让Rollback发生return"OK";}catch(Exceptionerr){returnerr.Message.ToString();}finally{cmd.Dispose();con.Close();}}-------------------------------------------------------------
解决方案
解决方案二:
晕,rollback通常用在出错后回滚你这里都已经执行了,还回滚rollback?前面的内容都执行完了,rollback好像没有意义哦。
解决方案三:
你不要晕本人就是要测试OleDb的Rollback对DB400是不是起作用,所以故意写在这里的
解决方案四:
没有用过,很难说清楚。首先验证各种OLEIBMDA400是否果真支持Transaction(即使不支持Transaction,你通常也可以在你的SQL变量所包含的语句中显示地使用数据库的事务指令)。其次参照各种宣称支持事务的OLEIBMDA400的例子,大概网上有不少例子都是仅仅做一个简单的示例而根本没有仔细考察事务操作,尽量使用那些特意示例事务操作的例子中的ConnectionString而不是你自己的写法。最后,也只好看看除了这个OLE驱动以外还有没有别的公司出品的驱动了,包括不一定使用OLE方式。
解决方案五:
up
解决方案六:
友情up