XmlReader を使用したデータの取得

Microsoft .NET Framework クラス ライブラリの System.Xml 名前空間に属する XmlReader クラスは、AdomdDataReader クラスと同様、非キャッシュ、順方向専用の高速データ アクセスをサポートしています。CellSet オブジェクトを使用したデータのインメモリ分析ビューが不要であれば、XmlReader オブジェクトは、大量の XML データを取得するのに最も適しています。XmlReader はデータをストリームとして処理するので、データを呼び出し元へ返す前に、すべてのデータを取得してキャッシュに格納する必要がありません。一方、CellSet オブジェクトを使用して XML for Analysis 応答を分析オブジェクト モデルに変換する場合は、事前にすべてのデータをキャッシュに取り込む必要があります。

XmlReader クラスは、AdomdCommand オブジェクトの ExecuteXmlReader メソッドが呼び出されると、ADOMD.NET が受信した XML for Analysis 応答への直接アクセスを提供します。取得するデータは未加工の XML なので、データとメタデータを手動で解析する必要があります。データの取得が完了したら、すぐに XmlReader オブジェクトを閉じてください。

データとメタデータの取得

XmlReader クラスを使用してデータを取得するには、次の手順に従います。

  1. XmlReader オブジェクトの新しいインスタンスを作成します。

    XmlReader クラスの新しいインスタンスを作成するには、AdomdCommand オブジェクトの Execute メソッドまたは ExecuteXmlReader メソッドを呼び出します。

  2. データを取得します。

    コマンドによってクエリが実行され、XmlReader が返された後、データとメタデータを自分で解析する必要があります。XML データおよびメタデータは、XML for Analysis プロバイダで使用されるネイティブ形式で表されます。通常、XML for Analysis プロバイダのネイティブ形式は MDDataSet 形式です。MDDataSet 形式によって、セルセットのデータおよびメタデータの両方が、適切に構成された形式で提供されます。MDDataSet 形式の詳細については、XML for Analysis の仕様書を参照してください。

  3. XmlReader を閉じます。

    XmlReader オブジェクトの使用が終了したら、常に Close メソッドを呼び出す必要があります。XmlReader が開いている間は、その XmlReader によって、コマンドの実行時に使用した AdomdConnection オブジェクトが排他的に使用されます。現在開いている XmlReader を閉じない限り、新しい XmlReader や AdomdDataReader を作成するなど、その AdomdConnection を使用するコマンドは一切実行できません。

XmlReader からのデータ取得例

次の例では、コマンドを実行してデータを XmlReader として取得し、ファイルの内容をコンソールに出力します。

        void OutputDataWithXML()
        {
            //Open a connection to the local server.
            AdomdConnection conn = new AdomdConnection("Data Source=localhost");
            conn.Open();

            //Create a command to retrieve the data.
            AdomdCommand cmd = new AdomdCommand(@"WITH MEMBER [Measures].[FreightCostPerOrder] AS 
[Measures].[Reseller Freight Cost]/[Measures].[Reseller Order Quantity],  
FORMAT_STRING = 'Currency'

SELECT [Geography].[Geography].[Country].&[United States].Children ON ROWS, 
[Date].[Calendar].[Calendar Year] ON COLUMNS
FROM [Adventure Works]
WHERE [Measures].[FreightCostPerOrder]", conn);

            //Execute the command, retrieving an XmlReader.
            System.Xml.XmlReader reader = cmd.ExecuteXmlReader();

            //Do something with the reader: Parse data, Parse metadata,
            //                              Save for later loading into CellSet, etc.
            Console.WriteLine(reader.ReadOuterXml());

            //Close the reader, then the connection
            reader.Close();
            conn.Close();

            //Await user input.
            Console.ReadLine();
        }