回滚后提交事务时会发生什么?

时间:2019-07-29 05:46:23

标签: c# sql-server tsql

假设我有一个C#类,该类为数据库创建事务,然后调用存储过程。如果发生错误,存储过程将返回int = 1。假设我们更新了一个表,然后返回1,因为SP中某个地方发生了错误。

然后在c#中引发异常,该异常调用一个方法来回滚事务-但在该方法的FINALLY块中,我们提交事务。

自从交易回滚以来,当我们调用commit时会发生什么?

2 个答案:

答案 0 :(得分:4)

如果回滚该事务,则在该事务中进行的所有更改都将...回滚,取消。因此,至少在没有其他事务等待时,您对“ finally块”的提交不会做任何事情。

我不会在commit块中放置commit方法,而是在try块的末尾提交事务,并在catch块中回滚。

答案 1 :(得分:1)

我也建议您在尝试使用catch块的同时在存储过程中使用事务。

我已经确认,回滚后我们无法提交同一笔交易。

确保另一个事务不在等待中,否则它将被提交。

在finally块中也不对事务执行任何操作。始终使用finally块关闭连接,数据读取器等。

始终在try块中提交,并在catch块中进行回滚。