Получение данных с помощью объекта XmlReader
Класс XmlReader, входящий в пространство имен System.Xml библиотеки классов платформы Microsoft .NET Framework, обеспечивает быстрый однопроходный доступ к данным без кэширования, как и класс AdomdDataReader. Если нет необходимости создавать аналитическое представление данных в памяти с помощью объекта CellSet, то для получения XML-данных (особенно больших объемов) хорошо подходит объект XmlReader. Поскольку объект XmlReader передает данные в потоке, ему нет необходимости получать и кэшировать данные перед передачей их вызывающему коду, как было бы сделано при использовании объекта CellSet для преобразования ответа XMLA в аналитическое представление модели объектов.
Класс XmlReader обеспечивает прямой доступ к ответу XML для аналитики, полученному ADOMD.NET, через вызов метода ExecuteXmlReader объекта AdomdCommand. Синтаксический анализ полученных данных необходимо выполнить вручную, поскольку они представляют собой необработанный XML. Объект XmlReader должен быть закрыт сразу же после получения данных.
Получение данных и метаданных
Чтобы произвести получение данных с помощью класса XmlReader, выполните следующие шаги.
Создайте новый экземпляр объекта.
Для создания нового экземпляра класса XmlReader вызывайте метод Execute или ExecuteXmlReader объекта AdomdCommand.
Выполните получение данных.
После того как команда выполнит запрос и вернет объект XmlReader, необходимо произвести синтаксический анализ данных и метаданных. Данные и метаданные XML представлены в собственном формате, используемом поставщиком XML для аналитики. Для большинства поставщиков XML для аналитики собственным является MDDataSet. Формат MDDataSet предоставляет данные и метаданные наборов ячеек в хорошо структурированной форме. Дополнительные сведения о формате MDDataSet см. в спецификации XML для аналитики.
Закройте модуль чтения.
После завершения работы с объектом XmlReader необходимо вызывать метод Close. Пока открыт объект 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();
}
См. также
Справочник
Получение данных из источника аналитических данных