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

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

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

DataAdapterのUpdateがうまくいかない


(過去ログ 7 を表示中)

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

■7093 / inTopicNo.1)  DataAdapterのUpdateがうまくいかない
  
□投稿者/ てつ 二等兵(1回)-(2006/10/03(Tue) 11:41:07)

分類:[C#] 


分類:[C#] 

現在、C#2005でWindowsアプリケーションを作っております。

データベース(MySQL)のテーブルメンテナンスアプリなのですが、
GridViewを使用してテーブルのデータを表示し、
その外に、レコードの各フィールドに連結されたテキストボックス等の入力フォームを配置しているという感じです。

で、入力フォームで値を変更し更新ボタンをクリックすると、
CommandBuilderで命令文を自動生成し、
DataSetの内容をデータベースに反映するという感じなのですが、
変更を加え更新ボタンをクリックすると,
DataAdapterのUpdateメソッドでエラーとなり更新されないのです。
InvalidOperationExceptionという例外で、
「MySqlCommandBuilder cannot operate on tables with no unique or key columns」
というエラー内容です。

実は全く同じアプリをVB.NETの2003で作っていて、その時はうまくいっていました。
そのコードをそのままC#の文法で書き換えてるだけのつもりなのですがうまくいきません。

調べていると主キー情報がDataSetに無いため、
その様になるというような情報もあったので、
対策としてDataAdapterのFillメソッドの前にFillSchemaメソッドを行うとか、
MissingSchemaActionプロパティをAddWithKeyに設定するとかしてもうまくいかず、
CommandBuilderのインスタンス生成タイミングを換えてみたりもしたのですが、
やはりうまくいきません。原因はどこらへんにあるのでしょうか。

//DataSetの生成とGridViewへのデータ連結部分
ds = new DataSet();

cn.Open();
cmd.Connection = cn;
cmd.CommandText = "SELECT * FROM " + tableNm;
da.SelectCommand = cmd;
da.MissingSchemaAction = MissingSchemaAction.AddWithKey;
da.Fill(ds, tableNm);
cmd.Connection.Close();

this.dg.DataSource = ds;
this.dg.DataMember = tableNm;


//データベースへの変更反映部分
cn.Open();
MySqlCommandBuilder cb = new MySqlCommandBuilder(da);
int cnt = da.Update(ds, tableNm);
cn.Close();
MessageBox.Show(cnt + "件のレコードを更新しました");



0
引用返信 編集キー/
■7160 / inTopicNo.2)  Re[1]: DataAdapterのUpdateがうまくいかない
□投稿者/ てつ 二等兵(2回)-(2006/10/03(Tue) 23:38:45)

分類:[C#] 

すみません。自己解決しました。
GridViewへのデータ連結用のSelectCommandを設定した後、
他の動作でSelectComanndのSQL文を書き換えていたため、おかしくなっていました。
連結用のSelectCommandの設定のタイミングを後回しにしたらうまくいきました。

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -