C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: datatable の fill 〜 updateについて


(過去ログ 109 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■64932 / inTopicNo.1)  datatable の fill 〜 updateについて
  
□投稿者/ 泣いてる子羊 (1回)-(2013/01/23(Wed) 08:39:51)

分類:[VB.NET/VB2005 以降] 

System.Data
同時実行違反 : UpdateCommandによって、処理予定の1レコードのうち0件が処理されました。

上記エラーが解決できなくて困って居ます。

VB2005 + Mysql でプログラミングしています。

今現在困っているのは、MYSQLの単独テーブルを単純にdataadapter で datatableにfillで読込み、
いくつかの値を変更したのちupdateコマンドで反映させるというコードです。
いままで何の問題もなく実行できていたのですが、今回作っているプログラムでは何をやっても解決できません。
もう何時間もぐぐっているのですが泣きそうです。。

ソースはいたってシンプルで


MYSQLからの読込は以下のコードを使って居ます。
宣言は省いていますが、privateでやってあります。

        'データアダプター
        da_sql = New MySqlDataAdapter()
        'データアダプターのキー取得
        da_sql.MissingSchemaAction = MissingSchemaAction.AddWithKey
        '接続コマンド生成
        cmd = New MySqlCommand(sqlStr)
        '接続 
        con_sql.Open()
        'データアダプター
        da_sql.SelectCommand = New MySqlCommand(sqlStr, con_sql)
        'コマンドビルダー
        cb_sql = New MySqlCommandBuilder(da_sql)
        'データセットに代入
        da_sql.Fill(tbl)
        'クローズ
        con_sql.Close()



MYSQLへの反映は修正後に以下のコードでやっています。

            '接続 
            con_sql.Open()
            'データアダプタをアップデート
            da_sql.Update(tbl)
            'クローズ
            con_sql.Close()


修正自体はdatagridviewにバインドさせた状態でやったり、直接datatableへ変更をかけたりもして
試しているのですが、あるテーブルでのみ同時実行違反が発生します。
ほかのテーブルでは問題ありません。

同時実行違反を文字どおりの解釈をした問題は皆無である事は間違いありません。
ほぼなんの実行もしていないプログラム上で、このDB読み書きだけのコードを実行しているので
誰かがアクセスしていたり、別プロセスが読みにいってたりなんて事はないです。

WEBでいろいろ情報を漁っていたところ、MYSQLの予約後をカラム名に使うと発生したりとか、
レコードに空白があるとだめだとか、あらゆる事を確かめてみましたが解決に至っていません。
どなたか、このような経験もしくは知識がある方いらっしゃいましたら助けていただけないでしょうか?


引用返信 編集キー/
■64933 / inTopicNo.2)  Re[1]: datatable の fill 〜 updateについて
□投稿者/ 魔界の仮面弁士 (124回)-(2013/01/23(Wed) 09:20:40)
No64932 (泣いてる子羊 さん) に返信
> 同時実行違反 : UpdateCommandによって、処理予定の1レコードのうち0件が処理されました。

n 行のレコードに対して INSERT / DELETE / UPDATE 操作を行ったものの、
影響を受けたのは n 行ではなく 0 行だけだった、というエラーですね。


> いままで何の問題もなく実行できていたのですが、今回作っているプログラムでは何をやっても解決できません。

更新直前(CommandBuilder を適用した後)の DataAdapter に対して、
InsertCommand / UpdateCommand / DeleteCommand の内容を
確認してみてください。

場合によっては、これらのコマンドを手動で差し替える必要があるかも知れません。



> WEBでいろいろ情報を漁っていたところ、MYSQLの予約後をカラム名に使うと発生したりとか、
> レコードに空白があるとだめだとか、あらゆる事を確かめてみましたが解決に至っていません。

今まで経験したケースでは、下記のようなものがあります。

・テーブル名や列名に予約語が使われていた。

・日付時刻型のパラメーターが、日付型にマッピングされてしまい、
 時刻情報無しで比較されることで、正しいデータを参照できなくなっていた。

・更新元のテーブルに主キー列が含まれていなかったため、
 更新データの一意性を確保できなくなっていた。

・自動採番フィールドの取り扱いミスなど

http://www.gizcollabo.jp/vbtomo/boards/vbdatabase_spread_2430.html
http://dobon.net/vb/bbs/log3-39/24070.html
http://dobon.net/vb/bbs/log3-42/25261.html
引用返信 編集キー/
■65019 / inTopicNo.3)  Re[2]: datatable の fill 〜 updateについて
□投稿者/ 泣いてる子羊 (2回)-(2013/01/30(Wed) 07:54:20)
No64933 (魔界の仮面弁士 さん) に返信

あれからすったもんだやったんですが、結果原因がわからずでした。
ご指示いただいた内容も全部確認してみたのですが特に問題は無かったようです。

が、結果として問題となっていたテーブルを予約後や日付等を考慮しながら同じ内容で再作成し差し替えたところ収まりました orz
どこが悪かったのか結果わからずじまいで気持ち悪い状態です(;;

再作成で収まったと言う事は、予約語やら日付の関連で変なデータがあって、ただの凡ミスだったのだなと強制的に言い聞かせております。

本当に大変お騒がせしました。
今後ともよろしくお願いいたします。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -