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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.64932 の関連記事表示

<< 0 >>
■64932  datatable の fill 〜 updateについて
□投稿者/ 泣いてる子羊 -(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の予約後をカラム名に使うと発生したりとか、
    レコードに空白があるとだめだとか、あらゆる事を確かめてみましたが解決に至っていません。
    どなたか、このような経験もしくは知識がある方いらっしゃいましたら助けていただけないでしょうか?

親記事 /過去ログ109より / 関連記事表示
削除チェック/

■64933  Re[1]: datatable の fill 〜 updateについて
□投稿者/ 魔界の仮面弁士 -(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
記事No.64932 のレス /過去ログ109より / 関連記事表示
削除チェック/

■65019  Re[2]: datatable の fill 〜 updateについて
□投稿者/ 泣いてる子羊 -(2013/01/30(Wed) 07:54:20)
    No64933 (魔界の仮面弁士 さん) に返信

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

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

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

    本当に大変お騒がせしました。
    今後ともよろしくお願いいたします。
記事No.64932 のレス / END /過去ログ109より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -