我们开发用DB是Oracle 10g,其中牵扯都使用事物控制功能,通过.net使用OracleClient dll 编写的DB 连接类来实现在DB的操作,但是现在碰到一个特棘手的问题:当我们打开DB之后,做了ora.BeginTrans();方法之后,还没用做ora.Commit();中间操作的数据就已经写入了DB,而且这种情况还有不稳定性,就是说有时能正常开启事物、提交事物已经回滚事物;有时就是我刚才所描述的;
针对这个现象我们也做了大量的测试,包括我们的DB操作类或是页面上使用UpdatePanel,结果发现还是一样的存在此类现象;就在昨天我们还尝试了用我们开发的DB操作类去连接处理别的DB,可是得到的结果是对的,正是事物控制的正常流程!!!
因此我们怀疑,如果用使用DB的事物控制,是否应该在DB中要提前设提什么?恳请大侠赐教!重谢!~新年祝愿大家新春愉快!
针对这个现象我们也做了大量的测试,包括我们的DB操作类或是页面上使用UpdatePanel,结果发现还是一样的存在此类现象;就在昨天我们还尝试了用我们开发的DB操作类去连接处理别的DB,可是得到的结果是对的,正是事物控制的正常流程!!!
因此我们怀疑,如果用使用DB的事物控制,是否应该在DB中要提前设提什么?恳请大侠赐教!重谢!~新年祝愿大家新春愉快!
又打开了一个事物还是当前事物。
如果新事物中查询到的,如楼上所说,查询autocommit属性
如果是当前事物,那是很正常的
感谢二楼&三楼兄弟回复:
当我用.net执行了ora.BeginTrans();之后,马上跟踪到DB中查看,结果已经存在一条数据,'又打开了一个事物还是当前事物。',我可以这条回答你,我们的程式从头到尾都是一个Oracle 事物在做控制,也就是说始终是一个事物,除非我第二次运行此程式。即便是新事物,但是在么ora.Commit();之前DB中应当是看不到任何的DML语句操作的结果!!!
我们通过.net使用OracleClient dll 编写的DB 连接类来实现在DB的操作,而这个类在别的Oracle DB上能正常进行事物控制流程!因此我现在的怀疑还是在DB本身上,应该是要在Oracle DataBase上做相关的设置!!
恳请各位不吝赐教!!!
要不把代码贴出来一起看看?