1

コードを使用してトランザクションを正常に保存した後...トランザクションを編集して保存します...次に、次のエラーメッセージが表示されます。

ExecuteNonQueryでは、コマンドに割り当てられた接続が保留中のローカルトランザクションにある場合、コマンドにトランザクションが必要です。コマンドのTransactionプロパティが初期化されていません。

これが私のコードです:

Try
  sqlTrans = sqlCon_.BeginTransaction(IsolationLevel.RepeatableRead)
  sSQLAdapter_.UpdateBatchSize = 30
  sCommand_ = DirectCast(sSQLAdapter_.SelectCommand, SqlCommand)
  sCommand_.Connection = sqlCon_ 
  sCommand_.Transaction = sqlTrans 
  sSQLAdapter.SelectCommand.Transaction = sqlTrans

  sSQLAdapter_.Update(sDataSet.Tables(0))

  sqlTrans.Commit()
  sqlCon_.Close()

Catch ex As Exception
  sqlTrans.Rollback()
Finally
   sSQLAdapter.SelectCommand.Connection.Close()
   sSQLAdapter.SelectCommand.Connection = Nothing
   sSQLAdapter.SelectCommand.Transaction = Nothing
   sSQLAdapter.SelectCommand.CommandText = ""
   sSQLAdapter.SelectCommand.Dispose()

   sqlTrans.Dispose()
   sqlCon_.Close()
   sqlCon_.Dispose()
End Try
4

1 に答える 1

1

メソッドを呼び出すため、SqlDataAdapter のInsertCommandUpdateCommandおよびオブジェクトのトランザクション オブジェクト参照を設定する必要があります。DeleteCommandUpdate

MSDN リファレンス ドキュメント - DataAdapter でのトランザクションの使用

サンプル :

Using Cn As New SqlConnection(CnStr)
 Cn.Open()
 Using Trans As SqlTransaction = Cn.BeginTransaction
   Dim Adp As New SqlDataAdapter(selectQuery, Cn)
   Adp.SelectCommand.Transaction = Trans

   Dim cmb As New SqlCommandBuilder(Adp)
   Adp.DeleteCommand = cmb.GetDeleteCommand()
   Adp.InsertCommand = cmb.GetInsertCommand()
   Adp.UpdateCommand = cmb.GetUpdateCommand()

   Adp.InsertCommand.Transaction = Trans
   Adp.DeleteCommand.Transaction = Trans
   Adp.UpdateCommand.Transaction = Trans

   Dim dt As New DataTable
   Adp.Fill(dt)
   /* ------------- 

    Perform insert/delete/update on DataSet or DataTable 
    -------------- */ 
   Adp.Update(dt)
   Trans.Commit()
  End Using
 Cn.Close()
End Using
于 2012-09-13T04:13:31.620 に答える