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

サンプルダウンロード

○ プログラム

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

Program.cs

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Data.SqlClient;
  7. using System.Data;
  8. namespace DataSetTest1
  9. {
  10.  class Program
  11.  {
  12.   static void Main(string[] args)
  13.   {
  14.    //接続文字列
  15.    string constr = @"Data Source=(LocalDB)¥v11.0;AttachDbFilename=C:¥Work¥Books.mdf;Integrated Security=True;Connect Timeout=30";
  16.    //SqlConnectionオブジェクトを生成
  17.    SqlConnection con = new SqlConnection(constr);
  18.    //Usersテーブルのデータを取得するSQL文を作成
  19.    string sql = "SELECT * FROM Users";
  20.    //DataAdapterオブジェクトを生成
  21.    SqlDataAdapter da = new SqlDataAdapter(sql, con);
  22.    //DataSetオブジェクトを生成
  23.    DataSet ds = new DataSet();
  24.    //DataSetとデータベースに同期させる
  25.    da.Fill(ds);
  26.    //データセットの情報を表示する
  27.    Console.WriteLine("登録されているテーブルの件数:{0}", ds.Tables.Count);
  28.    Console.ReadLine();
  29.   }
  30.  }
  31. }

○ 実行結果

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

○ 解説

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

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

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

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

○ プロジェクト

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

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

サンプルダウンロード

○ 作成の準備

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

○ プログラム

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

Program.cs

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

○ 実行結果

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

○ 解説

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

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

前へ   次へ