使用 XmlReader 检索数据

XmlReader 类是 Microsoft .NET Framework AdomdDataReader 类库System.Xml命名空间的一部分,类似于 类,因为 XmlReader 类还提供对数据的快速、非缓存、只进访问。 如果不需要使用 CellSet 对象的内存中数据分析视图, XmlReader 对象非常适合用于检索 XML 数据,尤其是对于大量数据。 由于 XmlReader 流式传输数据,因此在向调用方公开数据之前 ,XmlReaderCellSet 无需检索和缓存所有数据,就像使用 对象将 XML for Analysis 响应转换为分析对象模型表示形式一样。

XmlReader 类提供对 XML for Analysis 调用 ExecuteXmlReaderAdomdCommand 对象的 方法时 ADOMD.NET 接收的响应的直接访问权限。 由于接收到的数据为原始 XML 数据,所以必须手动分析这些数据和元数据。 检索数据后,应关闭 XmlReader 对象。

检索数据和元数据

若要使用 XmlReader 类检索数据,请执行以下步骤:

  1. 创建对象的新实例。

    若要创建 XmlReader 类的新实例,请调用 Execute 对象的 或 ExecuteXmlReaderAdomdCommand 方法。

  2. 检索数据。

    命令运行查询并返回 XmlReader 后,必须分析数据和元数据。 XML 数据和元数据由 XML for Analysis 访问接口所使用的本机格式表示。 对于大多数 XML for Analysis提供程序,本机格式是 MDDataSet 格式。 MDDataSet 格式以结构良好的格式为单元集提供数据和元数据。 有关 MDDataSet 格式的信息 ,请参阅 XML for Analysis规范。

  3. 关闭读取器。

    使用完 XmlReaderClose 对象后,应始终调用 方法。 当 XmlReader 打开时, 该 XmlReaderAdomdConnection 独占使用用于运行命令的 对象。 <在关闭原始 XmlReader 之前,你将无法使用该 xref:Microsoft.AnalysisServices.AdomdClient.AdomdConnection> 运行任何命令,包括创建另一个 XmlReaderAdomdDataReader

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