我们开发用DB是Oracle 10g,其中牵扯都使用事物控制功能,通过.net使用OracleClient dll 编写的DB 连接类来实现在DB的操作,但是现在碰到一个特棘手的问题:当我们打开DB之后,做了ora.BeginTrans();方法之后,还没用做ora.Commit();中间操作的数据就已经写入了DB,而且这种情况还有不稳定性,就是说有时能正常开启事物、提交事物已经回滚事物;有时就是我刚才所描述的;
 针对这个现象我们也做了大量的测试,包括我们的DB操作类或是页面上使用UpdatePanel,结果发现还是一样的存在此类现象;就在昨天我们还尝试了用我们开发的DB操作类去连接处理别的DB,可是得到的结果是对的,正是事物控制的正常流程!!!
 因此我们怀疑,如果用使用DB的事物控制,是否应该在DB中要提前设提什么?恳请大侠赐教!重谢!~新年祝愿大家新春愉快!

解决方案 »

  1.   

    .net是不是有自动提交功能之类的,把它关了,通过在SQL中使用commit和rollback来控制事务。
      

  2.   

    你是如何知道已经提交到数据库的。
    又打开了一个事物还是当前事物。
    如果新事物中查询到的,如楼上所说,查询autocommit属性
    如果是当前事物,那是很正常的
      

  3.   


    感谢二楼&三楼兄弟回复:
     当我用.net执行了ora.BeginTrans();之后,马上跟踪到DB中查看,结果已经存在一条数据,'又打开了一个事物还是当前事物。',我可以这条回答你,我们的程式从头到尾都是一个Oracle 事物在做控制,也就是说始终是一个事物,除非我第二次运行此程式。即便是新事物,但是在么ora.Commit();之前DB中应当是看不到任何的DML语句操作的结果!!!
     我们通过.net使用OracleClient dll 编写的DB 连接类来实现在DB的操作,而这个类在别的Oracle DB上能正常进行事物控制流程!因此我现在的怀疑还是在DB本身上,应该是要在Oracle DataBase上做相关的设置!!
    恳请各位不吝赐教!!!
      

  4.   

    现在测试的结果是:客户端导致事务异常.也就是我发现在我们TEAM中所有成员的机器上调试的时候都会出现这个问题,但是采用其他TEAM的机器就不会出现这个问题,难道oracle10g 客户端的某种配置能导致这种事务异常吗?小弟实在很疑惑,恳请各位大侠赐教!
      

  5.   

    代码执行中catch到了任何异常没?
    要不把代码贴出来一起看看?
      

  6.   

    代码中么出现任何异常,数据在Commit之前已经被提交到相应的Table!
      

  7.   

    原来是Windows 补丁的问题, 当我们在Server上打了补丁后, 就可以解决此问题, 具体的pitch id=KV955704吧。留个问题的归结吧,希望对大家有用!