共用方式為


使用 XmlReader 擷取資料

屬於 Microsoft .NET Framework 類別庫的 System.Xml 命名空間的 XmlReader 類別,類似於 AdomdDataReader 類別,因為 XmlReader 類別也可以用快速、非快取且順向的方式存取資料。如果不需要使用 CellSet 物件,對資料進行記憶體中的分析檢視,XmlReader 物件也非常適合用以擷取 XML 資料,特別是大量的資料。因為 XmlReader 會串流資料,所以XmlReader 不必擷取和快取所有的資料,即可向呼叫端公開資料,如果 CellSet 物件是用來將 XML for Analysis 回應轉換為分析物件模型表示,也是如此。

當呼叫 AdomdCommand 物件的 ExecuteXmlReader 方法時,XmlReader 類別可以直接存取 ADOMD.NET 收到的 XML for Analysis 回應。因為擷取的資料是原始 XML,所以您必須手動剖析資料與中繼資料。在擷取資料之後,應該立即關閉 XmlReader 物件。

擷取資料和中繼資料

若要使用 XmlReader 類別擷取資料,請遵循以下步驟:

  1. 建立物件的新執行個體。

    若要建立 XmlReader 類別的新執行個體,請呼叫 AdomdCommand 物件的 ExecuteExecuteXmlReader 方法。

  2. 擷取資料。

    在命令執行查詢和傳回 XmlReader 之後,您必須剖析資料和中繼資料。XML 資料與中繼資料會以 XML for Analysis 提供者所使用的原生格式呈現。對於大部分的 XML for Analysis 提供者,原生格式是 MDDataSet 格式。MDDataSet 格式以結構良好的格式提供資料格集的資料與中繼資料。如需有關 MDDataSet 格式的詳細資訊,請參閱 XML for Analysis 規格。

  3. 關閉讀取器。

    完成使用 XmlReader 物件後,務必呼叫 Close 方法。當 XmlReader 處於開啟狀態時,該 XmlReader 對於用以執行命令的 AdomdConnection 物件具有獨佔使用權。在您關閉原始 XmlReader 之前,您將無法執行任何使用該 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();
        }