ADO.NET と ADO の比較

更新 : 2007 年 11 月

ActiveX データ オブジェクト (ADO: ActiveX Data Objects) の特定の機能と比較すると、ADO.NET の機能が理解できます。

データのインメモリ表現

ADO では、データのインメモリ表現はレコードセットです。ADO.NET では、これがデータセットになります。レコードセットとデータセットの間には、重要な違いがあります。

テーブルの数

レコードセットは 1 つのテーブルのように見えます。レコードセットに複数のデータベース テーブルからのデータを含める場合は、JOIN クエリを使用する必要があります。このクエリは、さまざまなデータベース テーブルからのデータを 1 つの結果テーブルにまとめます。

対照的に、データセットは 1 つ以上のテーブルの集まりです。データセット内のテーブルはデータ テーブルと呼ばれ、具体的には DataTable オブジェクトです。データセットに複数のデータベース テーブルからのデータが含まれる場合、通常は、複数の DataTable オブジェクトが含まれます。つまり、それぞれの DataTable オブジェクトが通常は 1 つのデータベース テーブルまたはビューに対応します。このようにして、データセットは元のデータベースの構造を反映できます。

通常、データセットにはリレーションシップも含まれています。データセット内のリレーションシップは、データベース内の外部キー リレーションシップに相当します。つまり、テーブルの行を互いに関連付けるものです。たとえば、データセットに投資家に関するテーブルと各投資家の株式購入に関するテーブルが含まれている場合、このデータセットには、投資家テーブルの各行と購入テーブルの対応する行とを結び付けるリレーションシップも含むことができます。

データセットには複数の異なるテーブルを含むことができ、テーブル間のリレーションシップに関する情報も保持できるため、レコードセットより豊富なデータ構造を保持できます。これには、自己関係テーブルや多対多リレーションシップを持つテーブルなども含まれます。

データの移動とカーソル

ADO では、ADO MoveNext メソッドを使用して、レコードセットの各行をシーケンシャルにスキャンできます。ADO.NET では、行がコレクションとして表されるため、すべてのコレクションと同じようにテーブル内をループすることができ、序数インデックスまたは主キー インデックスを通して特定の行にアクセスできます。DataRelation オブジェクトは、マスター レコードおよび詳細レコードに関する情報を保持し、作業中のレコードに関連するレコードを取得するためのメソッドを提供します。たとえば、Investor テーブル内の "Nate Sun" という名前の投資家の行から、この投資家の購入記録である、Purchase テーブル内の行のセットに移動できます。

904fck4k.alert_note(ja-jp,VS.90).gifメモ :

Windows フォーム アプリケーションには、データ ソースのレコード間を移動するための BindingNavigator が用意されています。詳細については、「BindingNavigator コントロール (Windows フォーム)」を参照してください。

"カーソル" とは、レコード間の移動を制御するデータベース要素です。データを更新したり、ほかのユーザーによってデータベースに加えられた変更を表示したりする場合に使用します。ADO.NET には、固有のカーソル オブジェクトはありませんが、従来のカーソルの役割を果たすデータ クラスが備わっています。たとえば、ADO.NET の DataReader オブジェクトでは、前方参照のみの読み取り専用のカーソルの機能が利用できます。

必要最小限の接続

ADO.NET では、Select または Update などのデータベース操作を実行するのに必要な間だけ接続を確立します。行をデータセットに読み込み、その行を使って作業するため、データ ソースとの接続を維持する必要はありません。ADO のレコードセットも非接続アクセスを提供できますが、主に接続アクセスを使用するようにデザインされています。

ADO と ADO.NET における非接続処理には、1 つの大きな違いがあります。ADO では、OLE DB プロバイダを呼び出すことでデータベースとやりとりします。ADO.NET では、TableAdapter またはデータ アダプタ (たとえば、SqlDataAdapter) を使ってデータベースと通信します。データ アダプタは、OLE DB プロバイダを呼び出すか、基になるデータ ソースから提供された API を呼び出します。重要な違いは、ADO.NET ではアダプタによって、パフォーマンスを最適化したり、データの妥当性を検査したり、他の処理を追加したりすることで、データセットへの変更をデータベースに転送する方法を制御できることです。

アプリケーションでのデータの共有

アプリケーション間で ADO.NET データセットを転送することは、接続していない ADO レコードセットを転送するよりもずっと簡単です。接続していない ADO レコードセットをコンポーネント間で転送する場合は、COM マーシャリングを使用します。ADO.NET でデータを転送するには、XML ストリームを転送できるデータセットを使用します。

XML ファイルの転送には、COM マーシャリングに比べて次のような利点があります。

豊富なデータ型

COM マーシャリングで使用できるデータ型は、COM 標準で定義されているデータ型に限られています。ADO.NET でのデータセットの転送は XML 形式に基づいているため、データ型に関する制限はありません。したがって、データセットを共有するコンポーネントは、それらのコンポーネントで通常使用されるのと同じ豊富なデータ型を使用できます。

パフォーマンス

大きな ADO レコードセットや大きな ADO.NET データセットを転送すると、ネットワーク リソースが使用されます。データのサイズが大きくなると、ネットワークにかかる負荷も増大します。ADO と ADO.NET のどちらの場合も、転送するデータを最小限に抑えることが可能です。しかし、ADO.NET には、データ型変換が必要ないという、もう 1 つのパフォーマンス上の利点があります。ADO では、コンポーネント間でレコードセットを転送するときに COM マーシャリングを必要とするため、ADO データ型を COM データ型に変換する必要があります。

ファイアウォールの通過

接続していない ADO レコードセットを 2 つのコンポーネント間で転送する場合は、ファイアウォールに阻まれる場合があります。ファイアウォールは、通常、HTML テキストは通過でき、COM マーシャリングのようなシステム レベルの要求は通過できないように設定されています。

ADO.NET データセットはコンポーネント間で XML を使用して交換されるため、ファイアウォールはデータセットの通過を許可します。

参照

概念

ADO.NET の利点

その他の技術情報

データ アクセスを使用した作業の開始

Visual Studio でのデータへの接続

アプリケーションでデータを受け取る準備

アプリケーションへのデータのフェッチ

Windows アプリケーションのフォームでのデータの表示

アプリケーションでのデータ編集

データの検証

データの保存

データ リソース