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

Winforms 如何从Windows应用程序回滚事务,winforms,sql-server-2008,transactions,commit,rollback,Winforms,Sql Server 2008,Transactions,Commit,Rollback,我正在处理一个Windows应用程序(WinForms),它需要运行四个不同的进程(存储过程),其中包括在四个进程中的任何一个进程引发错误的实例中提交或回滚整个进程的能力。我将在下面描述我的情况(请原谅我对SQL的无知,因为我不是DBA): Windows应用程序:单击进程按钮 数据库:启动过程1(并可能开始事务MyProcessTransaction) Windows应用程序:单击进程按钮 数据库:启动过程1(并可能开始事务MyProcessTransaction) Windows应用程序:

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

  • Windows应用程序:单击进程按钮

  • 数据库:启动过程1(并可能开始事务MyProcessTransaction)

  • Windows应用程序:单击进程按钮

  • 数据库:启动过程1(并可能开始事务MyProcessTransaction)

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

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

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

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

这可能吗?我尝试了四个查询窗口,并在第一个窗口中开始了一个事务,然后在其他窗口中放置了try-catch,并尝试在每个窗口中执行工作以模拟此操作,但当我到达第四个窗口并故意引发错误时,我收到了一个异常,即我无法回滚没有开始事务。有什么建议吗?

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

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