ページの先頭行へ戻る
Symfoware Server V11.1.0 アプリケーション開発ガイド(.NET Data Provider編)
FUJITSU Software

A.2.5 CommandBuilderを利用した更新

CommandBuilderを利用して更新を行うサンプルコードについて説明します。

本サンプルコードは、結果列がある場合は1行目を更新し、結果列がない場合は行を挿入します。行の更新処理または行の挿入処理を実行後、影響を受けた行数をWebページ上に表示します。事前にフォームへラベルコントロール(Label1)を追加してください。

アプリケーションの手順

  1. SymfowareConnectionオブジェクトを生成します。

  2. SymfowareDataAdapterオブジェクトを生成します。(SymfowareDataAdapterのSelectCommandのCommandTextプロパティへ問合せ式を設定します)

  3. DataSetオブジェクトを生成します。

  4. SymfowareDataAdapter.FillメソッドでデータをDataSetへ取得します。

  5. SymfowareCommandBuilderオブジェクトの生成

  6. データを更新します。
    SymfowareDataAdapter.Tables.Rows.Countメソッドを使用してDataSetに取り出した行数を取得します。
    行がある場合は1行目を更新対象行としてDataRowオブジェクトへ取り出します。
    行がない場合はDataSet.Tables.NewRowメソッドで新しい行を作成しDataRowオブジェクトへ取り出します。
    DataRow.BeginEditメソッドで更新モードにしてデータを更新します。
    DataRow.EndEditメソッドで更新を終了します。
    NewRowメソッドにより作成したDataRowオブジェクトをDataSet.Tables.Rows.Addメソッドで追加します。

  7. SymfowareDataAdapter.Updateメソッドで行の更新処理または行の挿入処理を実行します。

  8. DataSet.AcceptChangesメソッドでDataSetに対して行った更新内容をコミットします。

  9. コネクションを切断します。

  10. オブジェクトを破棄します。

エラー処理については、“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)
{
    // エラー処理ルーチンを記述 
}