OleDbDataAdapterのUpdateで同時実行違反が起こり困っています。
開発環境はVB.NET2008でmdbファイルをオープンし、
データを書き込んだ後
UPADTEしています。
別の処理ではうまく動いているアルゴリズムなので、
タイピングミスではないようです。
対応方法をお教えください。
Public da As OleDbDataAdapter
Public ds As New DataSet
ds.Clear()
sql = "select "
sql = sql & "* "
sql = sql & "from 物件 "
sql = sql & "where ((物件ID=1)) "
da = New OleDbDataAdapter(sql, currentCn)
da.Fill(ds, "tbl")
dr = ds.Tables("tbl").Rows(0)
dr("物件名") = "abc"
Dim cb As New OleDbCommandBuilder(da)
da.Update(ds, "tbl")
自己RESです。
mdbファイル
対象テーブルのフィールド名に"NO"を指定していると
このエラーが起きるようです。
フィールド名を変更することで回避いたしました。
更新対象データが存在しないか、既に変更が生じていると同時実行違反が出るはずです。
他の人による変更の可能性もあるし、
プログラムの作りによっては、自分自身が複数コネクション持ってて競合したり
という可能性もあるので、
部分だけ見ていても解決しない可能性もあります。
示されたコードだけをプログラム全体から切り出した
簡単なプログラムを実行してもその現象は再現しますか?
であれば、
とりあえず、以下の情報をください
・テーブルの構造(各フィールドの名前とデータ型、主キー)
・OleDbCommandBuilderが生成しているSQL
ああ、解決ですね。なるほど。
>・テーブルの構造(各フィールドの名前とデータ型、主キー)
を示して欲しかったのは、その可能性があったためです。
SQL文で[]で囲えば通る可能性もありますが、
そんなフィールド名は使用しないほうがよいでしょう。
ツイート | ![]() |