DataSetオブジェクト

 データセットクラスはメモリ上にデータをまとめて記憶できます。メモリ上に簡易データベースを作って、データベースと同期を取って利用します。同期を取るときに使用するのがDataAdapterオブジェクトです。

■ 主なプロパティ

プロパティ名 概要
DataSetName DataSetオブジェクトの名前を取得・設定する
Tables DataSetオブジェクトに格納されているテーブルのコレクションを取得する
DataSetの主なプロパティ

■ 主なメソッド

メソッド名 概要
Clear() DataSetからすべてのデータを削除する
GetXml() DataSetに格納されているデータのXML表現を返す
GetXmlSchema() DataSetに格納されているデータのXML表現のスキーマを返す
ReadXml(String) XMLファイルを使用してDataSetにスキーマとデータを読み込む
ReadXmlSchema(String) XMLファイルを使用してDataSetにスキーマを読み込む
WriteXml(String) XMLファイルにDataSetのデータを書き込む
WriteXmlSchema(String) XMLファイルにDataSetのスキーマを書き込む
DataSetの主なメソッド

 DataSetクラスは複数のクラスで構成されています。図で表してみましょう。

DataSetのイメージ
DataSetのイメージ

 各クラスにはプロパティにコレクションがあり、その中に複数のオブジェクトが関連付けられます。

○ プロジェクト

 プロジェクトを作成して確認してみましょう。DataAdapterクラスとDataSetクラスを使ったアプリケーションを作成しましょう。

プロジェクトの種類 コンソール アプリケーション
プロジェクト名 DataSetTest1

サンプルダウンロード

○ 作成の準備

 「DataReaderTest」プロジェクトを修正して作成しましょう。DataReaderTestフォルダーをコピーして、作成するプロジェクト名にフォルダー名を変更してください。

○ プログラム

 Mainメソッドに次のように記述してください。

Module1.vb

  1. Sub Main()
  2.  '接続文字列
  3.  Dim constr As String = "Data Source=(LocalDB)¥v11.0;AttachDbFilename=C:¥Work¥Books.mdf;Integrated Security=True;Connect Timeout=30"
  4.  'SqlConnectionオブジェクトを生成
  5.  Dim con As SqlConnection = New SqlConnection(constr)
  6.  'Usersテーブルのデータを取得するSQL文を作成
  7.  Dim sql As String = "SELECT * FROM Users"
  8.  'DataAdapterオブジェクトを生成
  9.  Dim da As New SqlDataAdapter(sql, con)
  10.  'DataSetオブジェクトを生成
  11.  Dim ds As New DataSet()
  12.  'DataSetとデータベースに同期させる
  13.  da.Fill(ds)
  14.  'データセットの情報を表示する
  15.  Console.WriteLine("登録されているテーブルの件数:{0}", ds.Tables.Count)
  16.  Console.ReadLine()
  17. End Sub

○ 実行結果

登録されているテーブルの件数:1

○ 解説

 16行目でDataAdapterオブジェクトを生成しています。コンストラクターの引数として、データセットと同期をとりたいテーブルからデータを抽出するSQL文と、Connectionオブジェクトを指定します。これにより、必要な時にデータベースに接続し、問い合わせ、接続を閉じてくれます。

 19行目ではDataSetオブジェクトを生成しています。生成したオブジェクトを22行目のDataAdapterオブジェクトのFillメソッドの引数に渡して、データベースと同期をとっています。

 今回は25行目でDataSetオブジェクトに登録されているテーブルの件数を表示しています。DataSetオブジェクトのTablesプロパティはコレクションです。コレクションは複数のオブジェクトを格納して管理するオブジェクトです。このオブジェクトのCountプロパティを使って、格納されているテーブルオブジェクトの数を表示しています。

 次にDataSetオブジェクトにもう一つテーブルを追加してみましょう。

○ プロジェクト

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

プロジェクトの種類 コンソール アプリケーション
プロジェクト名 DataSetTest2

サンプルダウンロード

○ 作成の準備

 「DataSetTest1」プロジェクトを修正して作成しましょう。DataSetTest1フォルダーをコピーして、作成するプロジェクト名にフォルダー名を変更してください。

○ プログラム

 Mainメソッドに次のように追加してください。

Module1.vb

  1. Sub Main()
  2.  '接続文字列
  3.  Dim constr As String = "Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Work\Books.mdf;Integrated Security=True;Connect Timeout=30"
  4.  'SqlConnectionオブジェクトを生成
  5.  Dim con As SqlConnection = New SqlConnection(constr)
  6.  'UsersテーブルとBooksテーブルのデータを取得するSQL文を作成
  7.  Dim sql As String = "SELECT * FROM Users;SELECT * FROM Books"
  8.  'DataAdapterオブジェクトを生成
  9.  Dim da As New SqlDataAdapter(sql, con)
  10.  'DataSetオブジェクトを生成
  11.  Dim ds As New DataSet()
  12.  'DataSetとデータベースに同期させる
  13.  da.Fill(ds)
  14.  'データセットの情報を表示する
  15.  Console.WriteLine("登録されているテーブルの件数:{0}", ds.Tables.Count)
  16.  Console.ReadLine()
  17. End Sub

○ 実行結果

登録されているテーブルの件数:2

○ 解説

 DataSetに複数のテーブルを登録する方法はいくつかありますが、今回は9行目にあるように、複数のテーブルからデータを取得するSQL文を作成しました。これによりDataSetオブジェクトに登録されているテーブルの件数が2件となります。

データベースとDataAdapterオブジェクトとDataSetオブジェクトの関係
データベースとDataAdapterオブジェクトとDataSetオブジェクトの関係

前へ   次へ