我正在尝试在 .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()
....