データベースを更新する

 今まではデータベースからデータの抽出を行ってきましたが、次にデータベースを更新する方法を見てみましょう。

 その方法として、SQLステートメントを生成して、Commandオブジェクトを通して実行することにより、更新・削除・追加を行うことができます。その他、DataSetの内容をデータベースに反映させるという方法もあります。前者の方法は、「4.2 トランザクション」のサンプルで使用されていました。そこで今回は、後者の方法を見てみましょう。

 DataSetなので、DataAdapterオブジェクトが関係してきます。このDataAdapterオブジェクトにはデータベースに変更を反映させるメソッドが用意されています。それはUpdate()メソッドです。

 しかし、DataSetに行を追加したり、行を削除したりする場合にはコマンドを生成しなくてはなりません。そこで、変更を加えたときに自動的にコマンドを生成してくれるオブジェクトを利用してみましょう。それはSqlCommandBuilderオブジェクトです。

○ プロジェクト

 プロジェクトを作成して確認してみましょう。

プロジェクトの種類 Windows フォーム アプリケーション
プロジェクト名 CommandBuilderTest

サンプルダウンロード

○ フォームデザイン

 次の図のようにコントロールを配置してください。

コントロールの配置例
コントロールの配置例

○ プログラム

 次のように各イベントプロシージャを記述してください。

Form1.vb

  1. 'データテーブルオブジェクトを作成する
  2. Dim dt As New DataTable
  3. 'アダプタオブジェクト用の変数を用意する
  4. Dim ad As SqlClient.SqlDataAdapter
  5. 'データテーブル変更時のコマンド生成用のオブジェクトの変数を用意する
  6. Dim cmd_bld As SqlClient.SqlCommandBuilder
  7. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  8.  '接続文字列を作成する
  9.  Dim con_string As String = _
  10.   "Data Source=.;AttachDbFilename=C:¥Work¥Books.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"
  11.  'コネクションオブジェクトを作成する
  12.  Dim con As New SqlClient.SqlConnection(con_string)
  13.  'SQL文を生成する
  14.  Dim sql As String = "SELECt * FROM M_ユーザー"
  15.  'アダプタオブジェクトを作成する
  16.  ad = New SqlClient.SqlDataAdapter(sql, con)
  17.  'コマンド自動生成オブジェクトを生成する
  18.  cmd_bld = New SqlClient.SqlCommandBuilder(ad)
  19.  'データテーブルとデータベースを同期させる
  20.  ad.Fill(dt)
  21.  'DataGridViewとDataTableを関連付ける
  22.  Me.DataGridView1.DataSource = dt
  23. End Sub
  24. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  25.  '更新
  26.  ad.Update(dt)
  27. End Sub

○ 実行結果

実行結果
実行結果

 DataGirdViewのデータに変更を加えて、「更新」ボタンをクリックすると、データベースにも変更が加えられます。新しいデータを追加しても、データベースに新しいレコードが追加されます。

前へ   次へ