第2回 データセットとデータテーブル:連載:Visual Studio 2005によるWindowsデータベース・プログラミング(1/3 ページ)
データセットを経由してDBにアクセスするのが.NET DBアプリの基本的なモデル。VB 2005を使ってデータセットを定義。
powered by Insider.NET
前回はVisual Basic 2005 Express Edition(以下VB 2005)を使って、WindowsアプリケーションのプロジェクトにSQLデータベースを追加し、そのデータベース内にテーブルを作成しました。今回からは、データベースのレコードをWindowsフォームのグリッドに表示することを取りあえずの目標として、そこまでの手順を1つずつ解説していきます。
今回では、前回でも少し登場した「データセット(DataSet)」を使っていきますが、その前にデータセットとは何かについて簡単に説明していきます。
データセットとは?
典型的な.NETのWindowsデータベース・アプリケーションでは、データセットを通じてアプリケーションからデータベースにアクセスします。データセットとは前回でも述べたように、簡単にいうと「データベースから取得したレコードをメモリ上に持つための入れ物」です。
例えば、データベースからレコードを取得し、それをグリッド・コントロールに表示するようなWindowsアプリケーションの大まかな構造は次の図のようになります。
この構造では、まずグリッドでの表示に必要なレコードをデータベースからデータセットに取得します。これはデータベースにSELECT文を発行することにより行われます。SELECT文の実行により得られたレコードは、データセット内にすべて格納されます。
グリッド・コントロールとデータセットはあらかじめ「データ連結(データバインド)」しておきます。これによりデータセットの内容はグリッド・コントロールにリアルタイムに反映されます。その結果、いま取得したデータセット内のレコードがグリッドに表示されるわけです。グリッド・コントロール上ではデータセットの内容に対して、並べ替えやページングが行えます。
グリッド上でデータを追加/編集/削除した場合には、データ連結によりデータセットの内容も変化します。変更が加えられたデータセットは、(通常は)ユーザーからの指示のタイミングでデータベースに反映されます。この場合にはデータセットの変更内容に従って、INSERT/UPDATE/DELETE文がデータベースに対して発行されます。
以上は、Windowsアプリケーションにおけるデータベース・アクセスのモデルといってよいでしょう。つまり、最初にデータセットにレコードを取得し、ユーザーによる操作(=業務)が完了した後、データセットのレコードをデータベースに反映するというモデルです。
このモデルでは、最初と(レコードの更新がある場合には)最後にしかデータベースにアクセスせず、基本的にはデータベースとは非接続であるため「非接続型データアクセス」と呼ばれます。VB 2005やVisual Studio 2005(以下VS 2005)のIDEを使って構築するWindowsデータベース・アプリケーションは基本的にこのモデルとなります。
データセット内のテーブルを表すデータテーブル
VB 2005のIDEでデータセットを使用する前に、「データテーブル(DataTable)」についても解説しておかなければなりません。
データベースにテーブルが含まれているように、データセットにはデータテーブルが含まれます(図2)。そして、データベースのレコードが実際にはテーブル内に格納されているように、データベースから取得したレコードは、実際にはデータセット内のデータテーブルに格納されます。
データテーブルでは、データベースのテーブルと同様のスキーマを定義することができます。つまり、データテーブルには列を定義でき、各列は列名やデータ型、制約などを設定できます。もちろん主キーとなる列も設定できます。このようにデータテーブルは実際のテーブルと同じ構造を持つことができ、データベースから取得したレコードをそのまま格納できるようになっています。
また、SQL Serverなどのリレーショナル・データベースではテーブル間のリレーション(リレーションシップ、関連)が重要ですが、データセットではデータテーブル間のリレーションも表現でき、データベースでの実際のリレーションをデータセット内でも維持できるようになっています。
データセットやデータテーブルについての説明は以上ですが、より詳細な解説は「ADO.NET基礎講座:第4回 データセットを使ったデータベース・アクセス」で行っていますので参考にしてください。
Copyright© Digital Advantage Corp. All Rights Reserved.