ADO.NET DataSet は、データのリレーショナル表現を提供します。 階層データ アクセスには、.NET Framework で使用できる XML クラスを使用できます。 これまで、これら 2 つのデータ表現は個別に使用されてきました。 ただし、.NET Framework を使用すると、 DataSet オブジェクトと XmlDataDocument オブジェクトを介して、データのリレーショナル表現と階層表現の両方にリアルタイムで同期アクセスできます。
DataSet が XmlDataDocument と同期されると、両方のオブジェクトが 1 つのデータ セットで動作します。 つまり、 DataSet に変更が加えられた場合、その変更は XmlDataDocument に反映され、その逆も同様です。 DataSet と XmlDataDocument の関係により、1 つのアプリケーションで単一のデータ セットを使用して、DataSet (Web フォームおよび Windows フォーム コントロール、Visual Studio .NET デザイナーなど) を中心に構築されたサービススイート全体、および Extensible Stylesheet Language (XSL) を含む XML サービススイートにアクセスできるため、優れた柔軟性が得られます。 XSL 変換 (XSLT)、および XML パス言語 (XPath)。 アプリケーションを対象とするサービスのセットを選択する必要はありません。両方とも使用できます。
DataSet と XmlDataDocument を同期するには、いくつかの方法があります。 次のようにすることができます。
DataSet にスキーマ (つまりリレーショナル構造) とデータを設定し、それを新しい XmlDataDocument と同期します。 これにより、既存のリレーショナル データの階層ビューが提供されます。 例えば次が挙げられます。
Dim dataSet As DataSet = New DataSet ' Add code here to populate the DataSet with schema and data. Dim xmlDoc As XmlDataDocument = New XmlDataDocument(dataSet)
DataSet dataSet = new DataSet(); // Add code here to populate the DataSet with schema and data. XmlDataDocument xmlDoc = new XmlDataDocument(dataSet);
DataSet にスキーマのみを設定し (厳密に型指定された DataSet など)、それを XmlDataDocument と同期してから、XML ドキュメントから XmlDataDocument を読み込みます。 これにより、既存の階層データのリレーショナル ビューが提供されます。 DataSet スキーマのテーブル名と列名は、同期する XML 要素の名前と一致している必要があります。 この名前の一致では、大文字と小文字が区別されます。
DataSet のスキーマは、リレーショナル ビューで公開する XML 要素にのみ一致する必要があることに注意してください。 これにより、非常に大きな XML ドキュメントを作成し、そのドキュメントに非常に小さなリレーショナル "ウィンドウ" を作成できます。 XmlDataDocument は、DataSet が XML ドキュメントのごく一部のみを公開している場合でも、XML ドキュメント全体を保持します。 (この詳細な例については、「 DataSet と XmlDataDocument の同期」を参照してください)。
次のコード例は、 DataSet を作成し、そのスキーマを設定し、それを XmlDataDocument と同期する手順を示しています。 DataSet スキーマは、DataSet を使用して公開する XmlDataDocument の要素とのみ一致する必要があることに注意してください。
Dim dataSet As DataSet = New DataSet ' Add code here to populate the DataSet with schema, but not data. Dim xmlDoc As XmlDataDocument = New XmlDataDocument(dataSet) xmlDoc.Load("XMLDocument.xml")
DataSet dataSet = new DataSet(); // Add code here to populate the DataSet with schema, but not data. XmlDataDocument xmlDoc = new XmlDataDocument(dataSet); xmlDoc.Load("XMLDocument.xml");
XmlDataDocument がデータを含む DataSet と同期されている場合、XmlDataDocument を読み込むことはできません。 読み込もうとすると例外がスローされます。
新しい XmlDataDocument を作成し、XML ドキュメントから読み込み、XmlDataDocument の DataSet プロパティを使用してデータのリレーショナル ビューにアクセスします。 DataSet を使用して XmlDataDocument 内のデータを表示するには、DataSet のスキーマを設定する必要があります。 ここでも、 DataSet スキーマのテーブル名と列名は、同期する XML 要素の名前と一致する必要があります。 この名前の一致では、大文字と小文字が区別されます。
次のコード例は、 XmlDataDocument 内のデータのリレーショナル ビューにアクセスする方法を示しています。
Dim xmlDoc As XmlDataDocument = New XmlDataDocument Dim dataSet As DataSet = xmlDoc.DataSet ' Add code here to create the schema of the DataSet to view the data. xmlDoc.Load("XMLDocument.xml")
XmlDataDocument xmlDoc = new XmlDataDocument(); DataSet dataSet = xmlDoc.DataSet; // Add code here to create the schema of the DataSet to view the data. xmlDoc.Load("XMLDocument.xml");
XmlDataDocument と DataSet を同期するもう 1 つの利点は、XML ドキュメントの忠実性が維持される点です。 DataSet が ReadXml を使用して XML ドキュメントから設定されている場合、データが WriteXml を使用して XML ドキュメントとして書き戻されるときに、元の XML ドキュメントと大きく異なる場合があります。 これは、 DataSet が XML ドキュメントの空白や階層情報 (要素の順序など) などの書式設定を維持しないためです。 データセットには、データセットのスキーマと一致しないため無視された XML ドキュメントの要素も含まれません。 XmlDataDocument を DataSet と同期すると、元の XML ドキュメントの書式設定と階層要素構造を XmlDataDocument で維持できますが、DataSet には DataSet に適したデータとスキーマ情報のみが含まれます。
DataSet を XmlDataDocument と同期する場合、DataRelation オブジェクトが入れ子になっているかどうかによって結果が異なる場合があります。 詳しくは、「DataRelation の入れ子化」をご覧ください。
このセクションにて
DataSet と XmlDataDocument の同期
厳密に型指定された DataSet を最小限のスキーマで XmlDataDocument と同期する方法を示します。
DataSet に対する XPath クエリの実行
DataSet の内容に対して XPath クエリを実行する方法を示します。
DataSet への XSLT 変換の適用
DataSet の内容に XSLT 変換を適用する方法を示します。
関連セクション
DataSet での XML の使用
DataSet の内容を XML データとして読み込んで永続化するなど、DataSet がデータ ソースとして XML と対話する方法について説明します。
DataRelation の入れ子化
DataSet の内容を XML データとして表すときの入れ子になった DataRelation オブジェクトの重要性について説明し、これらのリレーションシップを作成する方法について説明します。
DataSets、DataTables、DataViews
DataSet と、それを使用してアプリケーション データを管理し、リレーショナル データベースや XML などのデータ ソースと対話する方法について説明します。
XmlDataDocument
XmlDataDocument クラスに関する参照情報が含まれています。