使用 XmlReader 擷取資料

xmlreader類別是 Microsoft .NET Framework 類別庫之System.Xml命名空間的一部分,類似 AdomdDataReader 于在該類別中, xmlreader類別也提供快速、非快取、順向的資料存取權。 如果您不需要使用物件進行記憶體中的資料分析視圖, XmlReader物件最適合用 CellSet 來抓取 XML 資料,特別是針對大量資料。 因為 xmlreader 資料流程資料,所以 xmlreader 在將資料公開給呼叫端之前,不需要先取出和快取所有資料,如果 CellSet 使用物件將 XML for Analysis 回應轉換為分析物件模型標記法,就會發生這種情況。

當呼叫物件的方法 AdomdCommandExecuteXmlReaderXmlReader類別可讓您直接存取 ADOMD.NET 所接收的 XML for Analysis 回應。 因為擷取的資料是原始 XML,所以您必須手動剖析資料與中繼資料。 一旦資料經過抓取,就應該關閉 XmlReader 物件。

擷取資料和中繼資料

若要使用 XmlReader 類別來取出資料,請遵循下列步驟:

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

    若要建立 XmlReader 類別的新實例,請呼叫物件的 ExecuteExecuteXmlReader 方法 AdomdCommand

  2. 取出資料。

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

  3. 關閉讀取器。

    當您完成使用XmlReader物件時,請務必呼叫 Close 方法。 當 xmlreader 開啟時,該 xmlreader 會獨佔使用 AdomdConnection 用來執行命令的物件。 您將無法使用 < ' x: microsoft.analysisservices.sharepoint.integration.dll. microsoft.analysisservices.adomdclient. AdomdConnection > 執行任何命令,包括建立另一個 xmlreaderAdomdDataReader ,直到您關閉原始的 xmlreader為止。

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