Запрос на принятие транзакции не имеет соответствующей начальной транзакции с использованием ADO.net - PullRequest
0 голосов
/ 26 апреля 2018

Я хочу обновить пакетные записи в 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
...