DOBON.NET DOBON.NETプログラミング掲示板過去ログ

複数のデータセットのトランザクション

環境/言語:[Win 2000 Pro VB.NET]
分類:[.NET]

いつもお世話になります。
今回は複数のデータセットのトランザクションについて教えて下さい。

やりたいこと
 2つのデータアダプタからそれぞれ別のデータセットに対してupdate
 の処理を行いその2つのupdateに対してトランザクションをかけたい

やったこと

cn.Open()
Tr = cn.BeginTransaction()
Try
 '2つのデータアダプタを生成
DAa = New Odbc.OdbcDataAdapter(sSQL, cn)
DAa1 = New Odbc.OdbcDataAdapter(sSQL1, cn)

Dim cb As New Odbc.OdbcCommandBuilder(DAa)
Dim cb1 As New Odbc.OdbcCommandBuilder(DAa1)

DAa.SelectCommand.Transaction = Tr
DAa1.SelectCommand.Transaction = Tr

DAa.Fill(ds1)
CopyRow(ds1.Tables(0).Rows(0), J_HSet)
J_HSet.Tables(0).Rows(0).Item("keijyo_kbn") = 2
DAa.Update(J_HSet)

DAa1.Fill(ds2)
For i = 0 To ds2.Tables(0).Rows.Count - 1
CopyRow(ds2.Tables(0).Rows(i), J_MSet)
J_MSet.Tables(0).Rows(i).Item("keijyo_kbn") = 2
J_MSet.Tables(0).Rows(i).Item("h_tanka") = J_MSet.Tables(0).Rows(i).Item("h_tanka") * -1
J_MSet.Tables(0).Rows(i).Item("suryo") = J_MSet.Tables(0).Rows(i).Item("suryo") * -1
Next
DAa1.Update(J_MSet)
Tr.Commit()

Catch er As Exception
Tr.Rollback()
Finally
cn.Close()
End Try

長々書いてしまって申し訳ありません。
上記記述で実行したところ2回目のupdate処理はDBに反映されるの
ですが1回目のupdateの処理が反映されません。それで2回目の処理
をコメントして1回目の処理を実行すると1回目は正常にDBに反映
されます。なぜか最後にupdateしたものだけがDBに反映されている
ようです。 自分の記述方法がわるいのでしょうか?
わかる方がおられましたら宜しくお願いします。
■No13600に返信(こうさんの記事)
精査してないので、はずしてたら申し訳ありませんが、
最初のトランザクションのCommit前に
DAa1.Fill(ds2)で再読み込みかけてませんか?
ds1とds2の状況がわからないのでなんともいえませんが、データセットは違っても同じテーブルという前提です。
テーブルも違うということでしたら、一旦最初のUpdateをCommitされたらいかがでしょうか。
はずしてるかも知れませんが、とりあえず解法の起点になればと書かせてもらいました。
お返事おそくなりました。


今回の件はASP.NETとPOSTGRESで開発しているのですが
同じテーブルレイアウトでOLEDBを使用してSQLSERVER
で同じようにするとうまくいきました。
なぜだかわかりませんがPOSTGRESとODBCだと駄目のよう
です。

仕方ないのでデータセットはつかわずデータプロバイダ
でトランザクションの処理をすることにしました。

お返事の方本当にありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板