Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
SQLのトランザクション処理について
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=9035#CommentId11028
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
まる
 (社会人)
投稿日時
2009/3/24 01:44:17
いつもお世話になっております。
以前質問した項目と多少被るのですが、質問させていただきます。
タイトルの通り、トランザクション処理を入れたいのですが、どうしてもできません。
もしわかる方いましたら、ご教授お願いします。
プログラムの内容は、マスタ1のすべての列をそのままマスタ2の同じ列へコピーしています。
'接続先は同じです。
cn1 = DBBase.GetConnection
cn2 = DBBase.GetConnection
Public Sub SqlInsert()
Dim myTran As SqlClient.SqlTransaction
Dim adapter As New SqlClient.SqlDataAdapter(command1)
Dim table As New DataTable
'マスタ1
With command1
.Connection = cn1
.CommandType = CommandType.StoredProcedure
.CommandText = "ストアドプロシージャ名1"
.Parameters.Clear()
End With
myTran = cn2.BeginTransaction
'マスタ2
With command2
.Connection = cn2
.Transaction = myTran
.CommandType = CommandType.StoredProcedure
.CommandText = "ストアドプロシージャ名2"
.Parameters.Clear()
End With
adapter.Fill(table)←ここでエラー
Try
For Each row As DataRow In table.Rows
For i As Integer = 0 To 18
command2.Parameters.AddWithValue("@Parameter" + CStr(i), row(i))
Next
command2.ExecuteScalar()
Next
myTran.Commit()
MsgBox("データコピーは成功しました。", MsgBoxStyle.Information, "成功")
Catch ex As Exception
myTran.Rollback()
MsgBox(ex.Message + vbCrLf + "よって、データコピーに失敗しました。", MsgBoxStyle.Critical, "失敗")
End Try
adapter.Dispose()
table.Dispose()
command1.Dispose()
command2.Dispose()
End Sub
エラーメッセージは、
「ExecuteReader は、コマンドに割り当てられた接続が保留状態であるローカルのトランザクションにあるとき、トランザクション オブジェクトを持つコマンドが必要です。コマンドの Transaction プロパティがまだ初期化されていません。」
とでます。