ADO.NETによるデータベース・プログラミングをマスターするためには、まず「.NETデータ・プロバイダ」をよく理解しておくことが重要だ。
今回は、「.NETデータ・プロバイダ」と呼ばれる機能のみを使用して、データベースにアクセスするプログラムを作成しながら、ADO.NETについて解説していく。
まずは、.NETデータ・プロバイダについて少し詳しく見ていく。.NETデータ・プロバイダの役割を理解することは、ADO.NETのクラス構成を把握する上で非常に重要となるためだ。
前回では、ADO.NETの実体は.NET Frameworkクラス・ライブラリに含まれる一連のクラスの集まりであると述べたが、それらのクラスはさらに次の2つに分類することができる。
前者は、データベースに接続したり、データベースに対してコマンド(SQL文)を実行したり、検索結果をデーベースから取得したりするための、データベース・アクセスに直接かかわる一連のクラスで構成される。これら一連のクラスは「.NETデータ・プロバイダ」と呼ばれる。
例えば今回は、データベースであるMSDEに次のようなクラスを利用してアクセスする。前回でも解説しているように、MSDEはSQL Serverとはプログラミング・インターフェイスがまったく同一であるため、データベースがSQL Serverである場合でも、これらのクラスを利用して、まったく同じアプリケーションを利用することができる。
クラス名 | 機能 |
---|---|
SqlConnection | SQL Serverとの接続を表すクラス |
SqlCommand | SQL Serverに対して実行するコマンドを表すクラス |
SqlDataReader | SQL Serverからデータを読み取るクラス |
データベース(SQL ServerあるいはMSDE)のアクセス用として今回使用するクラス これらのクラスはSystem.Data.SqlClient名前空間に属している。 |
これら3つのクラスはすべてSystem.Data.SqlClient名前空間に属するクラスで、.NETデータ・プロバイダを構成しているクラスの一部だ。
一方、.NETデータ・プロバイダ関連のクラスとは別に、System.Data名前空間に属しているDataSetクラスを中心とする一連の「非接続型クラス」がADO.NETには用意されている。これらのクラスについては次回以降で詳しく解説する予定だが、簡単にいえば、これらのクラスはデータベースから読み取ったデータを、メモリ上に表形式で保持するための新しい仕組みを提供してくれる。非接続型クラスに対して、明示的なデータベースとの接続が前提となる.NETデータ・プロバイダのクラスは、「接続型クラス」と呼ばれることもある。
以上、ADO.NETを構成する2つのクラスの集まりを図にすると次のようになる。
この図のポイントをまとめると次のようになる。
■複数のデータ・プロバイダ
.NETデータ・プロバイダのクラスの例として、上の表では、今回使用するSystem.Data.SqlClient名前空間の次の3つのクラスを挙げた。
この名前空間に属しているこれら「Sql」で始まる名前のクラスは、すべてSQL Serverにアクセスするためのクラスである。.NETデータ・プロバイダを構成するクラスの中でも、これらのSQL Server専用のクラスには、「.NET Framework Data Provider for SQL Server」という名前が付けられている。
では、SQL Server以外のデータベースを利用する場合はどうなるのか。例えばMicrosoft Accessのデータベースについては、専用の.NETデータ・プロバイダは用意されていない。Microsoft Accessへのアクセスは、ODBCをベースにマイクロソフトが開発した「OLE DB」のインターフェイスに対応している「.NET Framework Data Provider for OLE DB」という.NETデータ・プロバイダを使用することになる。
このOLE DB用の.NETデータ・プロバイダを構成するクラスは、System.Data.OleDb名前空間にまとめられている。例えば、上記の3つのSql〜クラスと同等な処理を行うクラスは、次のようになっている。
OLE DBインターフェイスはオープンな仕様であり、各社のデータベース製品に対応したOLE DBドライバが用意されていれば、これらのクラスを利用して各データベースにアクセスすることができる。Microsoft AccessにアクセスするためのOLE DBドライバは、MDAC(Microsoft Data Access Components)に含まれており、MDACのコンポーネントは、.NET FrameworkやVisual Studio .NETのインストール時に併せてインストールされる。
以上の2つの.NETデータ・プロバイダが、.NET Frameworkバージョン1.0には用意されている。これに加えて、.NET Frameworkバージョン1.1では、ODBC用とOracleデータベース専用の.NETデータ・プロバイダも標準で用意される(下図)。
SQL ServerとOracleの2つにだけ、専用の.NETデータ・プロバイダが用意されている。もちろんこれは、これらのデータベース製品が世間で広く使用されており、専用にチューニングされたクラスにより、最適なパフォーマンスを得られるようにするためだ。
なお、.NET Frameworkバージョン1.0上でも、次のページよりダウンロードしたモジュールをインストールすることにより、ODBC用あるいはOracle用の.NETデータ・プロバイダを使用することができる。
■.NETデータ・プロバイダの定義
ここまでで、ADO.NETには各データベースやデータベース・アクセス用のインターフェイス(OLE DBおよびODBC)に対応した複数のデータ・プロバイダが含まれていることがお分かりいただけただろうか。
各.NETデータ・プロバイダを構成するクラスは、名前空間により分類されていて、さらには、クラス名に「Sql」や「OleDb」などの接頭辞が付けられている。では、こういったクラスの「セット」は、何をもって.NETデータ・プロバイダとなることができるのだろうか? それは、System.Data名前空間にある一連のインターフェイスを実装していることだ。
例えば、Connection、Command、DataReaderの3つに関するインターフェイスと、それらのインターフェイスを実装した各.NETデータ・プロバイダを列挙すると次の図のようになる。
インターフェイスは、クラスが実装しなければならないプロパティやメソッドの名前や型だけを定義したものだ。
最低限必要なインターフェイスを実装したクラスを作成し、対象となるデータベースを操作するための固有のコードで各クラスの中身をコーディングしたクラスのセットが、.NETデータ・プロバイダということだ(ただし、各.NETデータ・プロバイダのクラスでは、各データベースが持つ独自の機能をコーディングした、独自のプロパティやメソッドも追加されている)。
.NET Framework SDKに付属するリファレンス・マニュアルには、.NETデータ・プロバイダの実装例を示した、サンプル.NETデータ・プロバイダなども記述されており、自分で.NETデータ・プロバイダを作成することもできる。
Copyright© Digital Advantage Corp. All Rights Reserved.