Я хочу обновить пакетные записи в SqlTransaction. В каждой партии я обновляю 50 записей. Если какая-либо запись не может быть обновлена, я хочу откатить эти 50 записей. Я написал этот код в то время как цикл. Но я получаю следующую ошибку случайно.
«Запрос на принятие транзакции не имеет соответствующей начальной транзакции».
Ниже мой код:
Dim _completed as Integer=0
Dim sqlCon As SqlClient.SqlConnection = Nothing
Dim sqlTransaction As SqlClient.SqlTransaction = Nothing
Dim lstq as List(of SqlCommand) 'It contains list of update queries
sqlCon = New SqlClient.SqlConnection(AIMSCommon.sqlServerConnection)
sqlCon.Open()
While True
Dim _res = lstq.Skip(_completed).Take(40)
If _res.Count = 0 Then Exit While
If sqlCon.State <> ConnectionState.Open Then
sqlCon = New SqlClient.SqlConnection(AIMSCommon.sqlServerConnection)
sqlCon.Open()
End If
Try
sqlTransaction = sqlCon.BeginTransaction()
For Each cls In _res
Try
cls.Connection = sqlCon
cls.Transaction = sqlTransaction
Dim i As Integer = cls.ExecuteNonQuery()
cls.Dispose()
Catch ex As Exception
If cls IsNot Nothing Then
cls.Dispose()
End If
Throw ex
End Try
Next
sqlTransaction.Commit()
sqlTransaction.Dispose()
sqlTransaction = Nothing
_completed += _res.Count
Catch ex As Exception
sqlCon.Close()
sqlCon.Dispose()
If sqlTransaction IsNot Nothing Then
sqlTransaction.Rollback()
sqlTransaction.Dispose()
End If
If sqlCon IsNot Nothing Then
sqlCon.Close()
sqlCon.Dispose()
End If
End Try
End While
If sqlCon IsNot Nothing Then
sqlCon.Close()
sqlCon.Dispose()
End If