CommandBuilderを利用して更新を行うサンプルコードについて説明します。
本サンプルコードは、結果列がある場合は1行目を更新し、結果列がない場合は行を挿入します。行の更新処理または行の挿入処理を実行後、影響を受けた行数をWebページ上に表示します。事前にフォームへラベルコントロール(Label1)を追加してください。
アプリケーションの手順
SymfowareConnectionオブジェクトを生成します。
SymfowareDataAdapterオブジェクトを生成します。(SymfowareDataAdapterのSelectCommandのCommandTextプロパティへ問合せ式を設定します)
DataSetオブジェクトを生成します。
SymfowareDataAdapter.FillメソッドでデータをDataSetへ取得します。
SymfowareCommandBuilderオブジェクトの生成
データを更新します。
SymfowareDataAdapter.Tables.Rows.Countメソッドを使用してDataSetに取り出した行数を取得します。
行がある場合は1行目を更新対象行としてDataRowオブジェクトへ取り出します。
行がない場合はDataSet.Tables.NewRowメソッドで新しい行を作成しDataRowオブジェクトへ取り出します。
DataRow.BeginEditメソッドで更新モードにしてデータを更新します。
DataRow.EndEditメソッドで更新を終了します。
NewRowメソッドにより作成したDataRowオブジェクトをDataSet.Tables.Rows.Addメソッドで追加します。
SymfowareDataAdapter.Updateメソッドで行の更新処理または行の挿入処理を実行します。
DataSet.AcceptChangesメソッドでDataSetに対して行った更新内容をコミットします。
コネクションを切断します。
オブジェクトを破棄します。
エラー処理については、“A.2.8 エラー処理”を参照してください。
try { // 1.SymfowareConnectionオブジェクトの生成 SymfowareConnection con = new SymfowareConnection("DATA SOURCE=127.0.0.1;PORT=26551;" + "INITIAL CATALOG=TEST;USER ID=USER01;PASSWORD=PASS01"); // 2. SymfowareDataAdapterオブジェクトの生成 SymfowareDataAdapter adp = new SymfowareDataAdapter("SELECT * FROM SAMPLE1.TESTTBL", con); // 3. DataSetオブジェクトの生成 DataSet dst = new DataSet(); // 4. DataSetオブジェクトへデータを取得 adp.Fill(dst, "TESTTBL"); // 5. SymfowareCommandBuilderオブジェクトの生成 SymfowareCommandBuilder builder = new SymfowareCommandBuilder(adp); // 6. データの更新(DataSetに1行もデータがない場合は行を追加する) DataRow myRow; if (dst.Tables["TESTTBL"].Rows.Count != 0) { myRow = dst.Tables["TESTTBL"].Rows[0]; } else { myRow = dst.Tables["TESTTBL"].NewRow(); } myRow.BeginEdit(); myRow["KEY_C"] = 2; myRow["DEC_C"] = 9999999.999; myRow["DAT_C"] = "2007/04/10"; myRow["CHA_C"] = "TEST DATA"; myRow.EndEdit(); if (dst.Tables["TESTTBL"].Rows.Count == 0) { dst.Tables["TESTTBL"].Rows.Add(myRow); } // 7. 行の更新処理または行の挿入処理の実行 adp.Update(dst, "TESTTBL"); // 8. DataSetオブジェクトに対して行われたすべての更新をコミットする dst.AcceptChanges(); //メッセージ表示 Label1.Text = "Normal End<br>データベースにデータが保存されました"; // 9. コネクション切断 con.Close(); // 10. オブジェクトの破棄 con.Dispose(); dst.Dispose(); adp.Dispose(); } // エラー処理 catch (Exception e1) { // エラー処理ルーチンを記述 }