|
分類:[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 + "件のレコードを更新しました");
|