事务存储过程C#

时间:2009-12-01 12:17:35

标签: c# stored-procedures transactions

我有一个小问题。请指导我。 我在C#编码(控制台应用程序)。我在我的代码中调用了两个不同的存储过程。基本上这两个存储过程都访问同一个表。 第一个SP具有选择查询和更新查询。 第二个SP有一个更新查询。

现在我想在事务模式下调用这些SP(要么全部成功,要么是第二个SP无法回滚第一个SP)。我在我的C#代码中使用了“TransactionScope”,但似乎没有工作正常。即当我停止控制台应用程序时,有时我会看到第一个SP被执行而第二个SP失败。

有人可以就此提出建议。

的问候,
贾斯汀塞缪尔。

1 个答案:

答案 0 :(得分:4)

如果您使用的是TransactionScope,则正常工作,但范围必须包围连接

using(TransactionScope tran = new TransactionScope()) {
    using(SqlConnection conn = new SqlConnection(cs)) {
      // either multiple commands on one connection
      using(SqlCommand cmd = conn.CreateCommand()) {
        // etc
      }
      using(SqlCommand cmd = conn.CreateCommand()) {
        // etc
      }
    }
    using(SqlConnection conn = new SqlConnection(cs)) {
      // or a separate connection
      using(SqlCommand cmd = conn.CreateCommand()) {
        // etc
      }
    }
    tran.Complete();
}

an edge case where a TransactionScope can fail导致后来的命令在没有事务的情况下运行。

或者,对于单个连接使用SqlTransaction,但请记住将事务(来自连接)与每个命令相关联。