我在一个共享库上有一个共享方法,该共享库将所有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代码中,以在将来理解此问题?