|
分類:[C#]
VS2005(C#)、Access2007(accdbでなくmdb)、Windows XP にて開発しています。
画面からデータを入力しマスタを作成するプログラムを作ろうとしています。 P-KeyとなるIDをオートナンバー型で取得し、text型、数値型等混在している1レコードをinsertします。 更新の場合は、IDを入力して他情報を表示し、変更してupdateします。
Formのロード時にデータセットに対象のテーブルのデータをFillしています。 データの入力、更新時の情報読み出しはできており、実行するとExecuteNonQueryも完了しています(戻り値が1なので1件のレコードが処理できていると認識しています)しプログラムとしても正常終了しますが、DBに反映されません。
sqlはAccessでクエリ実行すると問題なく使えます。Exeptionもでていません。
以下のような感じでプログラムを書いています(途中ははしょっています) cn,oda1はそれぞれデザイナで追加したコネクションとデータアダプタです。
ExecuteNonQueryはデータセットではなくDBを直接追加/更新できると思っているのですが違うのでしょうか? ずっとC言語を使用しており、今回ほぼ初めてC#を使っています。 いろいろな本を読んだりネットで情報を探していますが、何が悪いかさっぱり見当が付きません。
ヒント的なものでもかまいませんので教えてください。よろしくお願いします。
private void Form1_Load(object sender, EventArgs e) { ds1.Clear(); oda1.Fill(ds1, "tbl1"); }
private void btnEntry_Click(object sender, EventArgs e) { System.Data.OleDb.OleDbCommand cmd;
〜 中略 ここで入力内容のエラーチェック等行っています 〜
string sql = "insert into tbl1 (a, b, c) values ( a, b, c); cmd = new System.Data.OleDb.OleDbCommand(sql, cn); try { cn.Open(); } catch { MessageBox.Show("DB接続に失敗しました。", "通知"); if (cn != null) { cn.Close(); } Close(); }
try { int num = cmd.ExecuteNonQuery(); cmd.Dispose();
} catch (Exception ex) { MessageBox.Show("登録に失敗しました。" + ex.Message, "通知"); return; } finally { if (cn != null) { cn.Close(); MessageBox.Show("情報を登録しました。", "通知"); } ds1.Clear(); oda1.Fill(ds1, "tbl1"); // 続けて登録・更新できるよう読みなおし } }
|