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.3.8 エラー処理”を参照してください。
Try Dim row1 As DataRow '1.SymfowareConnectionオブジェクトの生成 Dim connection1 As New SymfowareConnection("DATA SOURCE=127.0.0.1;PORT=26551;INITIAL CATALOG=TEST;USER ID=USER01;PASSWORD=PASS01") '2.SymfowareDataAdapterオブジェクトの生成 Dim adapter1 As New SymfowareDataAdapter("SELECT * FROM SAMPLE1.TESTTBL", connection1) '3.DataSetオブジェクトの生成 Dim set1 As New DataSet '4.DataSet オブジェクトへデータを取得 adapter1.Fill(set1, "TESTTBL") '5.SymfowareCommandBuilderオブジェクトの生成 Dim builder1 As New SymfowareCommandBuilder(adapter1) '6.データの更新(DataSetに1行もデータがない場合は行を追加する) If (set1.Tables.Item("TESTTBL").Rows.Count <> 0) Then row1 = set1.Tables.Item("TESTTBL").Rows.Item(0) Else row1 = set1.Tables.Item("TESTTBL").NewRow End If row1.BeginEdit() row1.Item("KEY_C") = 2 row1.Item("DEC_C") = 9999999.999 row1.Item("DAT_C") = "2007/04/10" row1.Item("CHA_C") = "TEST DATA" row1.EndEdit() If (set1.Tables.Item("TESTTBL").Rows.Count = 0) Then set1.Tables.Item("TESTTBL").Rows.Add(row1) End If '7.行の更新処理または行の挿入処理の実行 adapter1.Update(set1, "TESTTBL") '8.DataSet オブジェクトに対して行われたすべての更新をコミットする set1.AcceptChanges() 'メッセージ表示 Me.Label1.Text = "Normal End<br>データベースにデータが保存されました" '9.コネクション切断 connection1.Close() '10.オブジェクトの破棄 connection1.Dispose() set1.Dispose() adapter1.Dispose() 'エラー処理 Catch exception1 As Exception 'エラー処理ルーチンを記述 End Try