Странное исключение при транзакции отката - PullRequest
2 голосов
/ 14 июня 2019

У меня есть общий метод для библиотеки, который выполняет все запросы 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, чтобы понять эту проблему в будущем?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...