回滚交易的奇怪例外

时间:2019-06-13 23:18:29

标签: sql-server vb.net

我在一个共享库上有一个共享方法,该共享库将所有SQL查询作为参数执行,但是有一天,当该方法试图回滚始终正常运行的查询时,生成了一个异常。例外是

  

此SqlTransaction已完成;它不再可用。

方法非常简单,就像这样:

Dim auxConnectionSB As New SqlClient.SqlConnectionStringBuilder
With auxConnectionSB
    .InitialCatalog = ""
    .DataSource = ""
    .UserID = ""
    .Password = ""
    .Pooling = ""
End With
Using auxConnection = New SqlClient.SqlConnection(auxConnectionSB.ToString)
    Try
        auxConnection.Open()
        Using auxTransaction = auxConnection.BeginTransaction
            Try
                For Each query In querys
                    Dim auxCommand = auxConnection.CreateCommand
                    auxCommand.CommandText = query
                    auxCommand.Transaction = auxTransaction
                    auxCommand.ExecuteNonQuery()
                Next
                auxTransaction.Commit()
            Catch ex As Exception
                auxTransaction.Rollback()
                Throw
            End Try
        End Using
    Catch ex As Exception
        Throw New CustomSqlException(auxConnection, ex)
    End Try
End Using

看到有关SQL跟踪的信息,查询的状态为“已中止”,因此ExecuteNonQuery确实引发了异常(可能是超时,但花费了34秒,默认超时是30秒),因此已激活回滚指令,但生成了前面提到的异常。

看到我的CustomSqlException上的信息,尝试执行回滚时,连接处于关闭状态,但是我的代码没有明确关闭连接,因此我不知道如何关闭连接。

我还应该复习什么才能理解此问题?还是应将哪些信息添加到SQL跟踪/ VB代码中,以在将来理解此问题?

0 个答案:

没有答案