如何从Windows应用程序回滚事务

时间:2012-12-04 17:29:44

标签: winforms sql-server-2008 transactions commit rollback

我正在开发一个Windows应用程序(WinForms),它需要运行四个不同的进程(存储过程),这些进程包括在实例中提交或回滚整个进程的能力,这四个进程中的任何进程都会引发错误。我将在下面描述我的情况(请原谅我的SQL无知因为我不是DBA):

  • Windows应用:点击处理按钮

  • 数据库:启动程序1(可能是BEGIN TRANSACTION MyProcessTransaction

  • Windows应用:点击处理按钮

  • 数据库:启动程序1(可能是BEGIN TRANSACTION MyProcessTransaction

  • Windows应用:接收来自程序1的通知,告知其已成功完成并更新进度条。

  • 数据库:启动程序2(并以某种方式仍然封装在 MyProcessTransaction 下)

  • Windows应用:接收来自程序2的通知,告知其已成功完成并更新进度条。

  • 数据库:启动过程3(并以某种方式仍然封装在 MyProcessTransaction 下)并引发错误并回滚事务 MyProcessTransaction

这可能吗?我尝试了四个查询窗口并在第一个开始一个事务,然后在其他窗口中尝试捕获并尝试在每个窗口中执行工作来模拟这个但是当我到达第四个窗口并故意引发错误时,我收到了异常没有BEGIN TRANSACTION让我能够回滚。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

好吧,像往常一样,在做了一些挖掘之后,我发现了一个适合我的解决方案。并不是说它是唯一的解决方案,但它有效并且有效:

https://stackoverflow.com/a/13228090/176806

我从来没有把2和2放在一起弄清楚TRANSACTION是特定于连接的,所以,我按照建议做了并通过连接对象创建了一个事务,并将该事务从调用传递给call,然后在一个错误的实例中,回滚那个交易。如果有人想回答其他问题,我仍然愿意接受任何建议。