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