検索
連載

第2回 .NETデータ・プロバイダによるデータベースのアクセス基礎解説 ADO.NET基礎講座 ―初めての.NETデータベース・プログラミング―(1/3 ページ)

ADO.NETによるデータベース・プログラミングをマスターするためには、まず「.NETデータ・プロバイダ」をよく理解しておくことが重要だ。

Share
Tweet
LINE
Hatena
基礎解説 ADO.NET基礎講座 ―― 初めての.NETデータベース・プログラミング ―― 
Insider.NET

 

「基礎解説 ADO.NET基礎講座 ―― 初めての.NETデータベース・プログラミング ―― 」のインデックス

連載目次

 今回は、「.NETデータ・プロバイダ」と呼ばれる機能のみを使用して、データベースにアクセスするプログラムを作成しながら、ADO.NETについて解説していく。

 まずは、.NETデータ・プロバイダについて少し詳しく見ていく。.NETデータ・プロバイダの役割を理解することは、ADO.NETのクラス構成を把握する上で非常に重要となるためだ。

.NETデータ・プロバイダとは?

 前回では、ADO.NETの実体は.NET Frameworkクラス・ライブラリに含まれる一連のクラスの集まりであると述べたが、それらのクラスはさらに次の2つに分類することができる。

  • .NETデータ・プロバイダを構成するクラス群
  • DataSetクラスを中心とする非接続型のクラス群(次回以降で解説予定)

 前者は、データベースに接続したり、データベースに対してコマンド(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つのクラスの集まりを図にすると次のようになる。


ADO.NETを構成する.NETデータ・プロバイダと非接続型クラス
データ・プロバイダは、データベースへの接続、コマンド(SQL文)実行、検索結果取得といったデータベース・アクセスに直接かかわる一連のクラス。非接続型クラスは、データベースから読み取ったデータを、メモリ上に表形式で保持するための新しい仕組みを提供するもの。

 この図のポイントをまとめると次のようになる。

  • ADO.NETを構成するクラスは、.NETデータ・プロバイダを構成するクラスと、DataSetクラスを中心とする非接続型クラスの2つに大別できる。
  • .NETデータ・プロバイダを構成するクラスが、データベースと接続して、データのやりとりを行う((1))。
  • 非接続型クラスでは、.NETデータ・プロバイダを経由してデータベースにアクセスできる((2))。
  • 非接続型クラスは、データベースと同様に、XML文書のデータにもアクセスできる((3))。

■複数のデータ・プロバイダ

 .NETデータ・プロバイダのクラスの例として、上の表では、今回使用するSystem.Data.SqlClient名前空間の次の3つのクラスを挙げた。

  • SqlConnectionクラス
  • SqlCommandクラス
  • SqlDataReaderクラス

 この名前空間に属しているこれら「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〜クラスと同等な処理を行うクラスは、次のようになっている。

  • OleDbConnectionクラス
  • OleDbCommandクラス
  • OleDbDataReaderクラス

 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データ・プロバイダも標準で用意される(下図)。


.NET Frameworkに含まれる4つの.NETデータ・プロバイダ
ODBC用とOracleデータベース用の.NETデータ・プロバイダは、.NET Frameworkバージョン1.1から標準で加わる。なお、.NET Frameworkバージョン1.1では、Windows CE用のデータベース「SQl Server CE」にアクセスするための「.NET Compact Framework Data Provider for SQL Server CE」も含まれているが、今回は割愛した。

 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データ・プロバイダを列挙すると次の図のようになる。


3つのインターフェイスとそれを実装した各データ・プロバイダのクラス
クラスのセットは、System.Data名前空間にある一連のインターフェイスを実装することで.NETデータ・プロバイダとして機能できるようになる。

 インターフェイスは、クラスが実装しなければならないプロパティやメソッドの名前や型だけを定義したものだ。

 最低限必要なインターフェイスを実装したクラスを作成し、対象となるデータベースを操作するための固有のコードで各クラスの中身をコーディングしたクラスのセットが、.NETデータ・プロバイダということだ(ただし、各.NETデータ・プロバイダのクラスでは、各データベースが持つ独自の機能をコーディングした、独自のプロパティやメソッドも追加されている)。

 .NET Framework SDKに付属するリファレンス・マニュアルには、.NETデータ・プロバイダの実装例を示した、サンプル.NETデータ・プロバイダなども記述されており、自分で.NETデータ・プロバイダを作成することもできる。

 

Copyright© Digital Advantage Corp. All Rights Reserved.

       | 次のページへ
ページトップに戻る