データ処理は、従来、主に接続ベースの 2 層モデルに依存していました。 データ処理では多層アーキテクチャがますます使用されるため、プログラマは、アプリケーションのスケーラビリティを向上させるために、切断されたアプローチに切り替えています。
ADO.NET コンポーネント
データにアクセスして操作するための ADO.NET の 2 つの主要なコンポーネントは、.NET Framework データ プロバイダーと DataSetです。
.NET Framework データ プロバイダー
.NET Framework データ プロバイダーは、データ操作用に明示的に設計されたコンポーネントであり、データへの高速、転送専用、読み取り専用アクセスです。
Connection
オブジェクトは、データ ソースへの接続を提供します。
Command
オブジェクトを使用すると、データベース コマンドにアクセスして、データの取得、データの変更、ストアド プロシージャの実行、パラメーター情報の送信または取得を行うことができます。
DataReader
は、データ ソースからのデータの高パフォーマンス ストリームを提供します。 最後に、 DataAdapter
は、 DataSet
オブジェクトとデータ ソースの間のブリッジを提供します。
DataAdapter
では、Command
オブジェクトを使用してデータ ソースで SQL コマンドを実行し、データを含むDataSet
を読み込み、DataSet
内のデータに加えられた変更をデータ ソースに調整します。 詳細については、「 .NET Framework データ プロバイダー 」および 「ADO.NET でのデータの取得と変更」を参照してください。
The DataSet
ADO.NET DataSet
は、データ ソースに関係なく、データ アクセス用に明示的に設計されています。 その結果、複数の異なるデータ ソースと共に使用したり、XML データと共に使用したり、アプリケーションに対してローカルなデータを管理したりすることができます。
DataSet
には、データの行と列で構成される 1 つ以上のDataTable オブジェクトのコレクションと、DataTable
オブジェクト内のデータに関する主キー、外部キー、制約、および関係情報も含まれます。 詳細については、「 DataSets、DataTables、DataViews」を参照してください。
次の図は、.NET Framework データ プロバイダーと DataSet
の関係を示しています。
ADO.NET アーキテクチャ
DataReader または DataSet の選択
アプリケーションで DataReader
( DataReader を使用したデータの取得を参照) または DataSet
( DataSet、DataTable、DataView を参照) のどちらを使用するかを決定する場合は、アプリケーションに必要な機能の種類を検討してください。
DataSet
を使用して、次の操作を行います。
データを操作できるように、アプリケーションでデータをローカルにキャッシュします。 クエリの結果のみを読み取る必要がある場合は、
DataReader
を選択することをお勧めします。階層間または XML Web サービスからのリモート データ。
Windows フォーム コントロールへのバインドや、複数のソースからのデータの結合と関連付けなど、データを動的に操作します。
データ ソースへのオープン接続を必要とせずに、データに対して広範な処理を実行します。これにより、他のクライアントが使用する接続が解放されます。
DataSet
によって提供される機能が不要な場合は、DataReader
を使用して前方専用の読み取り専用の方法でデータを返すことで、アプリケーションのパフォーマンスを向上させることができます。
DataAdapter
ではDataReader
を使用してDataSet
の内容を入力します (DataAdapter からの DataSet の設定を参照してください)、DataReader
を使用すると、DataSet
で消費されるメモリを節約し、DataSet
の内容を作成して入力するために必要な処理を回避できるため、パフォーマンスを向上させることができます。
LINQ to DataSet
LINQ to DataSet には、DataSet オブジェクトにキャッシュされたデータに対するクエリ機能とコンパイル時の型チェックが用意されています。 これにより、C# や Visual Basic などの .NET Framework 開発言語のいずれかでクエリを記述できます。 詳細については、「 LINQ to DataSet」を参照してください。
LINQ to SQL
LINQ to SQL では、中間概念モデルを使用せずにリレーショナル データベースのデータ構造にマップされるオブジェクト モデルに対するクエリがサポートされます。 各テーブルは個別のクラスで表され、オブジェクト モデルとリレーショナル データベース スキーマが密接に結合されます。 LINQ to SQL では、オブジェクト モデル内の言語統合クエリが Transact-SQL に変換され、実行のためにデータベースに送信されます。 データベースから結果が返されると、LINQ to SQL によって結果がオブジェクトに変換されます。 詳細については、「 LINQ to SQL」を参照してください。
ADO.NET Entity Framework(データベースアプリケーションを開発するためのフレームワーク)
ADO.NET Entity Framework は、開発者がリレーショナル ストレージ スキーマに対して直接プログラミングするのではなく、概念的なアプリケーション モデルに対してプログラミングすることで、データ アクセス アプリケーションを作成できるように設計されています。 目標は、データ指向アプリケーションに必要なコードとメンテナンスの量を減らすることです。 詳細については、「 ADO.NET Entity Framework」を参照してください。
WCF Data Services
WCF Data Services は、Web またはイントラネット上にデータ サービスを展開するために使用されます。 データは、エンティティ データ モデルの仕様に従ってエンティティとリレーションシップとして構成されます。 このモデルにデプロイされたデータは、標準の HTTP プロトコルでアドレス指定できます。 詳細については、「 WCF Data Services 4.5」を参照してください。
XML と ADO.NET
ADO.NET は、XML の機能を利用して、データへの切断されたアクセスを提供します。 ADO.NET は、.NET Framework の XML クラスと手を取って設計されています。どちらも 1 つのアーキテクチャのコンポーネントです。
ADO.NET と .NET Framework の XML クラスは、 DataSet
オブジェクトに収束します。
DataSet
には、ファイルか XML ストリームかに関係なく、XML ソースからのデータを設定できます。
DataSet
は、DataSet
内のデータのソースに関係なく、そのスキーマを XML スキーマ定義言語 (XSD) スキーマとして含む World-Wide Web Consortium (W3C) 準拠 XML として記述できます。
DataSet
のネイティブシリアル化形式は XML であるため、階層間でデータを移動するための優れた媒体であり、DataSet
は XML Web サービスとの間でデータとスキーマ コンテキストをリモート処理するための最適な選択肢になります。 詳細については、「 XML ドキュメントとデータ」を参照してください。