Share via


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

Microsoft .NET Framework クラスライブラリのSystem.Xml名前空間の一部であるxmlreaderクラスはクラスに AdomdDataReader 似ていますが、 xmlreaderクラスはデータへの高速で非キャッシュの前方参照専用アクセスを提供します。 オブジェクトを使用して CellSet データのインメモリ分析ビューが不要な場合、 XmlReader オブジェクトは特に大量のデータに対して XML データを取得するのに最適です。 Xmlreaderはデータをストリーム転送するため、データを呼び出し元に公開する前にすべてのデータを取得してキャッシュする必要はありません。これは、オブジェクトを CellSet 使用して XML for Analysis 応答を分析オブジェクトモデル表現に変換する場合と同様です。

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

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

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

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

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

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

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

  3. AdomdDataReader を閉じます。

    XmlReaderオブジェクトの使用が終了したら、常にメソッドを Close 呼び出す必要があります。 Xmlreaderが開いている間、そのxmlreaderは、コマンドの実行に使用されたオブジェクトを排他的に使用 AdomdConnection します。 元のxmlreaderを閉じるまで、別のxmlreaderAdomdDataReader を作成するなど、その < ' xref: microsoft.analysisservices.sharepoint.integration.dll > を使用してコマンドを実行することはできません。

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();
        }