.NET Framework クラス ライブラリの System.Xml 名前空間の一部である XmlReader クラスは、AdomdDataReader クラスに似ています。 どちらのクラスも、データへの高速でキャッシュされていない転送専用アクセスを提供します。 CellSet オブジェクトを使用してデータのインメモリ分析ビューを必要としない場合、XmlReader オブジェクトは、特に大量のデータの XML データを取得するのに最適です。 XmlReader はデータをストリーミングするため、呼び出し元にデータを公開する前にすべてのデータを取得してキャッシュする必要はありません。 これに対し、 CellSet オブジェクトを使用して分析応答の XML を分析オブジェクト モデル表現に変換する場合は、すべてのデータがキャッシュされるまで待つ必要があります。
XmlReader クラスは、ExecuteXmlReader オブジェクトのAdomdCommand メソッドが呼び出されたときに、ADOMD.NET によって受信された XML for Analysis 応答に直接アクセスできます。 取得したデータは生の XML であるため、データとメタデータを手動で解析する必要があります。 データが取得されるとすぐに、 XmlReader オブジェクトを閉じる必要があります。
データとメタデータの取得
XmlReader クラスを使用してデータを取得するには、次の手順に従います。
オブジェクトの新しいインスタンスを作成します。
AdomdCommand オブジェクトで Execute または ExecuteXmlReader メソッドを呼び出して、
XmlReaderインスタンスを作成します。データを取得します。
コマンドがクエリを実行し、 XmlReader を返した後、データとメタデータを解析します。 XML データとメタデータは、XML for Analysis プロバイダーで使用されるネイティブ形式です。 ほとんどの XML for Analysis プロバイダーでは、ネイティブ形式は MDDataSet 形式です。 MDDataSet 形式は、適切に構造化された形式でセルセットのデータとメタデータの両方を提供します。 MDDataSet 形式の詳細については、XML for Analysis の仕様を参照してください。
リーダーを閉じます。
XmlReader オブジェクトの使用が完了したら、Close メソッドを呼び出します。 XmlReader が開いている間は、コマンドを実行するAdomdConnection オブジェクトが排他的に使用されます。 元の XmlReader を閉じるまで、その <`xref:Microsoft.AnalysisServices.AdomdClient.AdomdConnection`> では、別の XmlReader または AdomdDataReader を作成することも含めて、どのコマンドも実行できません。
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();
}