【问题标题】:VB.NET - Transaction rollbackVB.NET - 事务回滚
【发布时间】:2012-12-30 02:16:21
【问题描述】:

如果事务既没有提交也没有回滚会发生什么。我正在寻找 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 管理器会挂起,直到上面的程序完成。在我的工作环境中,情况并非如此,即您可以同时运行查询。这是因为隔离级别吗?因此我有两个问题:

  1. 如果事务既没有提交也没有回滚会发生什么。我读过这样的文章:What happens if you don't commit transaction in a database (say SQL Server)。我可以假设事务在 SQL Server 和 Oracle 中回滚了吗?
  2. 为什么当事务处于活动状态时 SQL Server 在一个环境中挂起,而在另一个环境中却没有?

我正在专门寻找问题 2 的答案。

【问题讨论】:

    标签: vb.net transactions


    【解决方案1】:

    如果您不提交事务,数据库将在您关闭连接时将其回滚,假设您的代码发生了问题。这就是任何严肃的数据库的行为方式。

    至于您的第二个问题,我想这与锁定有关,但如果不了解您的环境以及谁在使用它们,这很难说。

    【讨论】:

      猜你喜欢
      • 2012-01-16
      • 1970-01-01
      • 2011-01-22
      • 2011-09-19
      • 2011-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多