mysql:12636
From: yoshiyasu tanaka <yoshiyasu tanaka <yoshiyasu.tanaka@xxxxxxxxxx>>
Date: Mon, 16 Jan 2006 11:52:58 +0900
Subject: [mysql 12636] Re: MySQL Connector/NET で Update できない
田中です。
UpdateCommandを取得してみました。
以下のような感じです。
--------------------
UPDATE
`DB名`.`テーブル名`
SET
`列名`=?列名
, ....
, (省略)
, ....
WHERE
`列名` <=> ?Original_列名
AND ....
AND (省略)
AND ....
;
SELECT
`列名`
, `列名`
, (省略)
, `列名`
FROM
`DB名`.`テーブル名`
WHERE
(`キー列名`=?Original_キー列名)
--------------------
18件までで成功する場合も19件で失敗する場合も同様です。
内部的に後半のSELECT文で元値を取得し、それを前半のWHERE句にバインドしているのでしょうか?
うーん・・・
06/01/14 に yoshiyasu tanaka<yoshiyasu.tanaka@xxxxxxxxxx> さんは書きました:
> 田中です。
> なるほど、ありがとうございます。
> 確認して、また報告します。
>
> 06/01/14 に 天野 潔<kiyoshi.amano@xxxxxxxxxx> さんは書きました:
> > 天野です。
> >
> > >"同時実行違反 : UpdateCommand によって 0件処理されました。"
> > >
> > >という、Exceptionが発生します。
> >
> > このExceptionは、更新しようとしているフィールドの値が、データセットを読み込んだ
> > ときの値と異なっているときに発生します。
> >
> > もし、データが書き換えられていないのにこの例外が発生するとしたら、MySQLCommandBu
> > ilderが自動生成したUpdateCommandに問題がある可能性がありますので、生成されたコマ
> > ンド文を調べられるとよいでしょう。
> >
> > コマンド文は、MySQLCommandBuilder.GetUpdateCommand で取得できます。
> >
> > 生成されるコマンドは簡略化すると次のようなものです。テーブル table1 のキーフィー
> > ルド keyfield がキー値である行のフィールド field1 を「元値」から「変更値」に変更
> > するとしたら、
> >
> > update table1 set field1 = 変更値 where keyfield = キー値 and field1 = 元値
> >
> > のような感じです。
> > ここで、where 句の該当行がない場合、上記Exceptionが発生します。
> >
> >
> > ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
> > 天野 潔 <kiyoshi.amano@xxxxxxxxxx>
> > ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
> >
> >
>
12633 2006-01-14 00:49 [yoshiyasu tanaka <yo] MySQL Connector/NET で Update できない 12634 2006-01-14 13:46 ┗[天野 潔 <kiyoshi.am] 12635 2006-01-14 22:35 ┗[yoshiyasu tanaka <yo] -> 12636 2006-01-16 11:52 ┗[yoshiyasu tanaka <yo] 12637 2006-01-16 15:44 ┗[天野 潔 <kiyoshi.am] 12638 2006-01-16 16:48 ┗[yoshiyasu tanaka <yo]