Я пытаюсь добавить поддержку транзакций для нашего объекта базы данных.
Этот объект является объектом удаленного взаимодействия. (это гарантирует, что на клиенте Windows не требуется подключение к базе данных.)
Теперь я хочу добавить поддержку транзакций;
По сути, клиент должен будет использовать это так:
- BeginTransaction
- ExecuteNonQuery ( "вставить ...")
- ExecuteNonQuery ( "вставить ...")
- Фиксация / откат
<code>
Public Function ExecuteNonQuery(ByVal Query As String) As Integer
Dim intResult As Integer = -1<br>
Using conn As New SqlConnection(Me.strConnectionString)<br>
Using cmd As New SqlCommand(Query, conn)<br>
conn.Open()
intResult = cmd.ExecuteNonQuery()<br>
End Using
End Using
Return intResult
End Function
Итак, проблема в том, что я не могу создать транзакцию, когда использую новое соединение (using conn...
) в методе выше.
Так что я думаю, что мне нужно переместить экземпляр SqlConnection за пределы метода и изменить его на переменную уровня класса. Но это не лучшая практика, я думаю. (?) Кроме того: выполнение большого количества запросов в последовательности приводит к ошибке: «внутренняя фатальная ошибка».
Кто-нибудь может указать мне правильное направление? Все примеры, которые я нашел в Интернете, охватывают транзакции самым простым способом, выполняя сразу несколько запросов.
edit: это немного похоже на этот вопрос . (Как использовать одну SqlTransaction для нескольких SqlConnections в .NET?) . Так что, может быть, это просто невозможно, но есть ли обходной путь?
edit 2: Также кажется, что эта «внутренняя фатальная ошибка» возникает потому, что объект используется параллельно. Может быть, это просто невозможно?