- 題名: ADO.NET トランザクションについて
- 日時: 2011/05/16 10:11:09
- ID: 28571
- この記事の返信元:
- (なし)
- この記事への返信:
- [28573] Re[1]: ADO.NET トランザクションについて2011/05/16 11:23:06
- ツリーを表示
ありがとうございます。
以下のように変更することでうまくいきました。
command.Transaction = trn が抜けていたようです。
command.ExecuteNonQueryを調べいる途中に新しい疑問がでてきたのですが、
command.ExecuteNonQueryはInteger型で返り値を持つようです。
正常な更新がされたときは1を返すので、更新処理のところで、
Dim count As Integer
count = Update_Record(sql文)
if count <> 1 then
MessageBox.Show("ERROR.")
Exit Sub
End If
とした方がいいのでしょうか。
特になくとも動くので、どういう意図があるのかよくつかめていません・・・
Private trn as SqlClient.SqlTransaction 'トランザクション
Private Sub Button_Update_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Update.Click
Try
'トランザクション開始
trn = cn.BeginTransaction
'更新処理
Update_Record(sql文)
'コミット
trn.Commit()
Catch ex As Exception
'エラーメッセージを表示
MessageBox.Show(ex.Message & vbCrLf & ex.StackTrace)
'ロールバック
trn.Rollback()
End Try
End Sub
Private Function Update_Record(ByVal sql As String) As Integer
Dim command As SqlClient.SqlCommand
command = cn.CreateCommand
command.Transaction = trn
command.CommandText = sql
'コマンド実行
Return command.ExecuteNonQuery
End Function
分類:[.NET]
お世話になります。 SQL SERVERのテーブルを更新しようとしています。 しかし、トランザクション処理を書き込むとエラーが出てしまいます。 どの部分がおかしいか、または、コードの不足など不具合があれば、 指摘して頂けませんでしょうか。 更新処理には、Dim command As SqlClient.SqlCommandを定義し、 sql文をcommand.ExecuteNonQuery()で実行しています。 エラーメッセージは、 command.ExecuteNonQuery()は、コマンドに割り当てられた接続に保留状態であるローカルのトランザクションにあるとき、トランザクションオブジェクトが持つコマンドが必要です。コマンドのTransaction プロパティがまだ初期化されていません。 と出ている状態です。 また、エラーではなく警告として、 変数 'trn' は、値が割り当てられる前に使用されています。Null 参照の例外が実行時に発生する可能性があります。 と出て、trn.Rollback()が指摘されています... Private Sub Button_Update_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Update.Click Dim trn As SqlClient.SqlTransaction 'トランザクション Try 'トランザクション開始 trn = cn.BeginTransaction '更新処理 'コミット trn.Commit() Catch ex As Exception 'エラーメッセージを表示 MessageBox.Show(ex.Message & vbCrLf & ex.StackTrace) 'ロールバック trn.Rollback() End Try End Sub