【发布时间】:2009-12-01 12:17:34
【问题描述】:
我有一个小问题。请指导我。 我正在用 C#(控制台应用程序)编码。我在我的代码中调用了 2 个不同的存储过程。基本上,这两个存储过程都访问同一个表。 第一个 SP 有一个选择查询和一个更新查询。 第二个 SP 有一个更新查询。
现在我想在事务模式下调用这些 SP(要么全部成功,要么第二个 SP 失败,回滚第一个 SP)。我在我的 C# 代码中使用了“TransactionScope”,但似乎不能正常工作。即当我停止控制台应用程序时,有时我会看到第一个 SP 已执行而第二个 SP 失败。
谁能给我建议。
问候,
贾斯汀·塞缪尔。
【问题讨论】:
-
您如何在代码中使用事务范围(使用 using 语句或 try/catch)?
-
是的,Goran,我使用“using”语句,例如: using (TransactionScope scope = new TransactionScope()) 包含在 try/catch 块中。并且对 SP 的调用在此范围内
-
我不明白这是怎么回事。在 OnExit 方法中添加回滚调用怎么样?这应该确保在您停止控制台应用程序并且事务未完成时调用回滚。
-
有人知道可能是什么问题吗?情况就像,当我打开控制台应用程序的第三个实例时它超时。我收到以下异常:SqlException -“超时已过期。在操作完成之前超时时间已过或服务器没有响应。”这可能是因为 SP 需要更多时间。 SP 只需选择 Top ID 并更新此 Top ID 的列。我认为我不需要更改 CommandTimeout,因为 SP 非常简单。
标签: c# stored-procedures transactions