【问题标题】:Second SQL command in a transaction doesn't run事务中的第二个 SQL 命令不运行
【发布时间】:2020-01-06 21:40:32
【问题描述】:

我试图在 .NET 的 1 个事务中运行 2 个 SQL 命令(1 个读取,1 个删除)。这就是我正在做的事情:

Using tran = objConn.BeginTransaction(IsolationLevel.Serializable)
    Using command As New SqlCommand("SELECT foo FROM bar WHERE cost > 1", objConn)
        command.Transaction = tran
        Using dr As SqlDataReader = scOnDemand.ExecuteReader()
            While dr.Read
                some_list.Add(dr("foo"))
            End While
        End Using
    End Using
    Using command As New SqlCommand("DELETE FROM bar WHERE cost > 1", objConn)
        command.Transaction = tran
        command.ExecuteNonQuery()                 //Doesn't do anything
    End Using
End Using

我们的想法是让这 2 个查询保持原子性,但由于某种原因,DELETE 不起作用。 SqlDataReader 读起来很好,它确实进入了第二个 using 语句,但 command.ExecuteNonQuery() 似乎没有做任何事情。为什么它不起作用?

【问题讨论】:

    标签: .net sql-server vb.net


    【解决方案1】:

    事务需要以Commit or Rollback 结尾。如果你不调用Commit,那么在 using 块结束时会自动调用 Rollback,当然不会执行删除。

    Using command As New SqlCommand("DELETE FROM bar WHERE cost > 1", objConn)
        command.Transaction = tran
        command.ExecuteNonQuery()                 
    End Using
    tran.Commit()
    ....
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-17
      • 2020-01-15
      • 2010-12-15
      • 1970-01-01
      相关资源
      最近更新 更多