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)
{
// エラー処理ルーチンを記述
}