如果事务既没有提交也没有回滚会发生什么。我正在寻找 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 管理器会挂起,直到上面的程序完成。在我的工作环境中,情况并非如此,即您可以同时运行查询。这是因为隔离级别吗?因此我有两个问题:
- 如果事务既没有提交也没有回滚会发生什么。我读过这样的文章:如果你不在数据库中提交事务会发生什么(比如 SQL Server)。我可以假设事务在 SQL Server 和 Oracle 中回滚吗?
- 为什么当事务处于活动状态时 SQL Server 在一个环境中挂起,而在另一个环境中却没有?
我正在专门寻找问题 2 的答案。