Используйте одно соединение SQL с несколькими транзакциями - PullRequest
4 голосов
/ 19 сентября 2011

У меня есть веб-приложение vb.net, и я передаю соединение SQL и транзакцию методу, который записывает одну запись в базу данных.

Я хотел бы запустить и зафиксировать транзакцию для каждой записи, которая записана, но с использованием того же соединения SQL, пока цикл не будет завершен.

Один метод, который я видел, использовал оператор using, но он не работал для меня. Он запускается в первый раз и выдает ошибку, когда транзакция уже была принята

Using sqlConnection = New SqlConnection(ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString)
  sqlConnection.Open()
  Using transaction = sqlConnection.BeginTransaction(IsolationLevel.ReadCommitted)

      For Each user In users
         Try
            myDataWriteMethod(user, conn, tr)

         Catch ex As Exception
            tranaction.rollback()
         End Try
         transaction.commit()
      Next 
    End Using
End Using  

Ответы [ 2 ]

2 голосов
/ 19 сентября 2011

Это должно делать то, что вы хотите.

Using sqlConnection = New SqlConnection(ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString)
    sqlConnection.Open()
    For Each user In users
        Using transaction = sqlConnection.BeginTransaction(IsolationLevel.ReadCommitted)
            Try
                myDataWriteMethod(user, conn, tr)
                transaction.Commit()
            Catch ex As Exception
                transaction.Rollback()
            End Try
        End Using
    Next   
End Using  
2 голосов
/ 19 сентября 2011

Похоже, что вы совершаете или откатываете транзакцию на каждом шаге цикла for.Вероятно, вам нужно (1) начать новую транзакцию для каждого пользователя, например,

Using sqlConnection = New SqlConnection(ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString)
  sqlConnection.Open()
  For Each user In users
      Using transaction = sqlConnection.BeginTransaction(IsolationLevel.ReadCommitted)
      ...

или (2) только зафиксировать или откатить транзакцию в конце, например,

Using sqlConnection = New SqlConnection(ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString)
  sqlConnection.Open()
  Using transaction = sqlConnection.BeginTransaction(IsolationLevel.ReadCommitted)

      Try
          For Each user In users
              myDataWriteMethod(user, conn, tr)
          Next
      Catch ex As Exception
          tranaction.rollback()
      End Try

      transaction.commit()
  End Using
End Using

Обратите внимание, что я не программист VB.NET, поэтому мой синтаксис может быть неправильным.

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