0

我正在开发一个 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 让我能够回滚。有什么建议么?

4

1 回答 1

0

好吧,像往常一样,在进行了一些挖掘之后,我找到了一个适合我的解决方案。并不是说它是唯一的解决方案,而是它高效且有效:

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

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

于 2012-12-04T18:18:03.707 回答