如果事务既未提交也未回滚,会发生什么情况。我正在寻找SQL Server和/或Oracle的答案。请参阅以下代码:
Public Sub TransactionTest()
Try
Dim intCount As Integer
Dim sql As SqlTransaction
Dim objCon As New SqlConnection("Data Source=IANSCOMPUTER;Initial Catalog=Test;Integrated Security=True;MultipleActiveResultSets=true")
objCon.Open()
Dim trans As SqlTransaction
trans = objCon.BeginTransaction
Dim paramValues(0) As SqlParameter
paramValues(0) = New SqlParameter("@ID", 1)
Using (objCon)
intCount = SqlHelper.ExecuteNonQuery(trans, CommandType.Text, "UPDATE person SET URN=1 WHERE ID2=@ID", paramValues)
paramValues(0) = New SqlParameter("@ID", 2)
intCount = SqlHelper.ExecuteNonQuery(trans, CommandType.Text, "UPDATE person SET URN=2 WHERE ID2=@ID", paramValues)
paramValues(0) = New SqlParameter("@ID", 3)
intCount = SqlHelper.ExecuteNonQuery(trans, CommandType.Text, "UPDATE person SET URN=3 WHERE ID2=@ID", paramValues)
End Using
Catch ex As Exception
'I do not swallow transactions
End Try
End Sub
请注意,它既未提交也未回滚。在上面的情况下,它似乎回滚。
我注意到在家里的SQL Server 2005 Express服务器上,SQL Studio Manager在控制台中直接运行查询时会挂起,直到上面的程序完成。在我的工作环境中,情况并非如此,即您可以同时运行查询。这是因为隔离级别吗?因此,我有两个问题:
我正在寻找一个问题2的答案。
答案 0 :(得分:1)
如果您不提交事务,数据库将在您关闭连接时将其回滚,假设您的代码发生了错误。这就是任何严肃的数据库的行为方式。
关于你的第二个问题,我想这与锁定有关,但如果不了解更多关于你的环境以及谁使用它们就很难说。