ADO.NET の利点
更新 : 2007 年 11 月
ADO.NET には、以前のバージョンの ADO や他のデータ アクセス コンポーネントと比べて、いくつかの利点があります。これらの利点は、以下のカテゴリに分けられます。
相互運用性
ADO.NET アプリケーションは、柔軟性を持ち幅広く受け入れられているという XML の長所を活用できます。ネットワーク上でのデータセットの送信に XML 形式を使用しているため、XML 形式を認識できる任意のコンポーネントでデータを処理できます。実際、データセットを受け取るコンポーネントが ADO.NET コンポーネントである必要はありません。送信側のコンポーネントは、受信側のコンポーネントがどのように実装されているかに関係なく、単に受け取り先にデータセットを送信するだけです。受け取り先のコンポーネントは Visual Studio アプリケーションの場合もあれば、なんらかのツールと共に実装されたほかのアプリケーションの場合もあります。データセットを受け取るコンポーネントが XML を認識できることが、唯一の要件です。XML は、業界標準として、まさにこのような相互運用性を考慮してデザインされています。
保守性
配置されたシステムのライフサイクルにおいては、軽微な変更が加えられる可能性はあっても、大がかりなアーキテクチャ上の変更は困難なためほとんど行われません。ただし、成り行きによっては、大幅な変更が必要になる場合もあります。たとえば、配置されたアプリケーションがユーザーに普及するにつれて、パフォーマンス負荷が増大しアーキテクチャの変更が必要になる場合があります。配置されたアプリケーションのパフォーマンス負荷が増大すると、システム リソースが不足して、待機時間やスループットに影響が出る可能性があります。このような問題が起こると、ソフトウェア開発者は、サーバーのビジネス ロジック処理とユーザー インターフェイス処理を異なるコンピュータ上の異なるソフトウェア層に分けることを考えます。実際には、アプリケーション サーバー層を 2 つの層で置き換え、システム リソースの不足を軽減します。
問題は、3 階層のアプリケーションをデザインすることではありません。むしろ、アプリケーションの配置後に階層の数を増やすということです。元のアプリケーションが ADO.NET でデータセットを使用して実装されていれば、この変更は簡単になります。1 階層を 2 階層で置き換える場合は、2 つの層の間で情報を交換できるようにする必要があります。階層間では XML 形式のデータセットを通してデータを転送できるため、やりとりは比較的簡単です。
プログラミング
Visual Studio の ADO.NET コンポーネントは、データ アクセス機能をカプセル化して、あらゆる点において、効率よく、ミスの少ない方法でプログラミングします。たとえば、データ コマンドでは、SQL ステートメントやストアド プロシージャを作成して実行するのに必要な作業が抽象化されます。
同様に、デザイナ ツールによって生成された ADO.NET データ クラスは、型指定されたデータセットになります。このため、型を使用したプログラミングによってデータにアクセスできます。たとえば、型指定されていないデータセットのデータ メンバにアクセスする次のコードを考えます。
If totalCost > CType(dataSet1.Tables("Customers").Rows(n)("AvailableCredit"), Double) Then
if (totalCost > (double)dataSet1.Tables["Customers"].Rows[n]["AvailableCredit"])
型指定されたデータセットのデータ メンバにアクセスする場合は、このコードが次のようになります。
If totalCost > dataSet2.Customers(n).AvailableCredit Then
if (totalCost > dataSet2.Customers[n].AvailableCredit)
型指定されたデータセットに対するコードの方が読みやすくなります。また、ステートメント入力候補が提供されるため、書くのも簡単です。たとえば、次のステートメントを記述するときには、入力する文字列の候補として、"AvailableCredit" が表示されます。
If totalCost > dataSet2.Customers(n).
さらに、型指定されたデータセットに対するコードの方が、コンパイル時に型がチェックされるため安全です。たとえば、AvailableCredit が通貨値として表されているとします。プログラマが誤って AvailableCredit に文字列値を代入した場合、コンパイル時にエラーが通知されます。型指定されていないデータセットで作業している場合は、実行時までエラーに気付きません。
型指定されたデータセットおよび型指定されていないデータセットの詳細については、「Visual Studio のデータセットの概要」を参照してください。
パフォーマンス
非接続型アプリケーションに対しては、ADO.NET データセットの方が接続していない ADO レコードセットに比べてパフォーマンス上の利点があります。COM マーシャリングを使用して接続していないレコードセットを階層間で転送する場合、レコードセット内の値を COM で認識できるデータ型に変換するため、大きな処理コストがかかります。ADO.NET では、そのようなデータ型変換が不要です。
スケーラビリティ
Web では、データに対する要求が大幅に増加する可能性があるため、スケーラビリティが欠かせない要素になっています。インターネット アプリケーションでは、潜在的なユーザーの数に制限がありません。アプリケーションが十数人のユーザーを適切に処理できても、数百人、または数十万人のユーザーを同じように適切に処理できるとは限りません。データベース ロックやデータベース接続などのリソースを使用するアプリケーションは、大量の数のユーザーを適切に処理できません。これは、限られたリソースへのユーザーの要求が、最終的には供給可能な量を超えてしまうためです。
ADO.NET は、プログラマが限られたリソースを節約して使うようにすることで、スケーラビリティを提供しています。すべての ADO.NET アプリケーションは、データに対して非接続アクセスを採用しているため、データベース ロックやアクティブなデータベース接続を長い時間保持することがありません。