假设我有一个C#类,该类为数据库创建事务,然后调用存储过程。如果发生错误,存储过程将返回int = 1
。假设我们更新了一个表,然后返回1,因为SP中某个地方发生了错误。
然后在c#中引发异常,该异常调用一个方法来回滚事务-但在该方法的FINALLY块中,我们提交事务。
自从交易回滚以来,当我们调用commit时会发生什么?
答案 0 :(得分:4)
如果回滚该事务,则在该事务中进行的所有更改都将...回滚,取消。因此,至少在没有其他事务等待时,您对“ finally块”的提交不会做任何事情。
我不会在commit块中放置commit方法,而是在try块的末尾提交事务,并在catch块中回滚。
答案 1 :(得分:1)
我也建议您在尝试使用catch块的同时在存储过程中使用事务。
我已经确认,回滚后我们无法提交同一笔交易。
确保另一个事务不在等待中,否则它将被提交。
在finally块中也不对事务执行任何操作。始终使用finally块关闭连接,数据读取器等。
始终在try块中提交,并在catch块中进行回滚。