建议你将这些逻辑放到一个事物中去,比如 myConnection.BeginTransaction()等到执行完再COMMIT 如果错误全部回滚 另外如果想查当时是否有更新可以用第三方工具查看日志操作还原当时的SQL语句。

解决方案 »

  1.   

    类似于微软的例子: http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqltransaction.commit(v=vs.71).aspx
      

  2.   

    我现在就是有个疑问,使用java里的Connection对象的commit方法提交事务,程序这边只是发送指令给数据库,但数据库提交有没有成功,并没有反馈,这样就不能做出错处理。是不是有什么办法。
      

  3.   

    你用的是啥框架还是什么helper class?标准的SqlConnection 没有你程序里的那些API,估计你调用的那个Connection本身就有BUG,你那么就用SmithLiu328 给出的ULR中那些原生的API,要么用些成熟的框架比如说enterprise library,如果只是封装一下的sqlhelper也可以哦,如果你的程序是.net framework 2.0的话。
      

  4.   


    sorry,看错了,请忽略上面的。
      

  5.   

    非常感谢各位的回复。用存储过程其实也是可以的。我主要是想搞清楚到底是什么原因导致了这个问题。如果这样写本身就有问题的话,那不是JDBC是有很大的问题的呀。C3p0会不会出现这样的情况,就是程序通过C3P0获取到了一个连接,并开启了一个事务,在事务中做了所有的SQL,最后要提交之前该连接断掉了,那么连接池会不会自动分配一个新的连接给原来的连接对象引用,这样由新的连接对象执行了commit方法提交,由于原来的连接断掉了,所以新连接对象提交实际上什么也没有做,也不会抛出异常。(呵呵,以上存储猜想,有时间一定要好好拜读下c3p0源码。)各位对此有什么看法。
      

  6.   

    在事务中做了所有的SQL,最后要提交之前该连接断掉了那样的话没有提交的事物就卡在那里了,除非认为的COMMIT或者Rollback。 由于这个问题会导致很多的Blocking影响性能,所以应该不会,否则用户早该抱怨了。
      

  7.   

    我现在把程序修改了一下,使用Statement做批处理,情况好像好些,但是心里还是没有底。还是想知道原因,求解。大家是不是在这方面有什么好的经验可以分享一下。
      

  8.   

    难道不是在事务和连接断开的时候才真正执行真正的commit吗?