使用 XmlReader 擷取資料
xmlreader類別是 Microsoft .NET Framework 類別庫之System.Xml命名空間的一部分,類似 AdomdDataReader 于在該類別中, xmlreader類別也提供快速、非快取、順向的資料存取權。 如果您不需要使用物件進行記憶體中的資料分析視圖, XmlReader物件最適合用 CellSet 來抓取 XML 資料,特別是針對大量資料。 因為 xmlreader 資料流程資料,所以 xmlreader 在將資料公開給呼叫端之前,不需要先取出和快取所有資料,如果 CellSet 使用物件將 XML for Analysis 回應轉換為分析物件模型標記法,就會發生這種情況。
當呼叫物件的方法 AdomdCommand 時 ExecuteXmlReader , XmlReader類別可讓您直接存取 ADOMD.NET 所接收的 XML for Analysis 回應。 因為擷取的資料是原始 XML,所以您必須手動剖析資料與中繼資料。 一旦資料經過抓取,就應該關閉 XmlReader 物件。
擷取資料和中繼資料
若要使用 XmlReader 類別來取出資料,請遵循下列步驟:
建立物件的新執行個體。
若要建立 XmlReader 類別的新實例,請呼叫物件的 Execute 或 ExecuteXmlReader 方法 AdomdCommand 。
取出資料。
在命令執行查詢並傳回 XmlReader之後,您必須剖析資料和中繼資料。 XML 資料與中繼資料會以 XML for Analysis 提供者所使用的原生格式呈現。 對於大部分的 XML for Analysis 提供者而言,原生格式為 MDDataSet 格式。 MDDataSet格式會以結構正確的格式,提供資料格集的資料和中繼資料。 如需有關 MDDataSet 格式的詳細資訊,請參閱 XML for Analysis 規格。
關閉讀取器。
當您完成使用XmlReader物件時,請務必呼叫 Close 方法。 當 xmlreader 開啟時,該 xmlreader 會獨佔使用 AdomdConnection 用來執行命令的物件。 您將無法使用 < ' x: microsoft.analysisservices.sharepoint.integration.dll. microsoft.analysisservices.adomdclient. AdomdConnection > 執行任何命令,包括建立另一個 xmlreader 或 AdomdDataReader ,直到您關閉原始的 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();
}