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