事务中的第二个 SQL 命令不运行



我正在尝试在 .NET 中的 2 个事务中运行 1 个 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()似乎什么也没做。 它不起作用的任何原因?

事务需要以提交或回滚结束。如果您不调用Commit则在使用块结束时会自动调用回滚,当然,不会执行删除。

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

最新更新