Поделиться через


Получение данных с помощью объекта XmlReader

Класс XmlReader, который является частью пространства имен System.Xml библиотеки классов платформы Microsoft .NET Framework, сходен с классом AdomdDataReader в том, что класс XmlReader также обеспечивает быстрый, однопроходный доступ к данным без кэширования. Если нет необходимости создавать аналитическое представление данных в памяти с помощью объекта CellSet, то для получения XML-данных, особенно больших объемов, хорошо подходит объект XmlReader. Так как объект XmlReader передает данные в потоке, ему не требуется получать и кэшировать данные перед передачей их вызывающему, как было бы сделано при использовании объекта CellSet для преобразования ответа XML для аналитики в представление аналитической модели объектов.

Класс XmlReader обеспечивает прямой доступ к ответу XML для аналитики, полученному ADOMD.NET, при вызове метода ExecuteXmlReader объекта AdomdCommand. Синтаксический анализ полученных данных необходимо выполнить вручную, поскольку они представляют собой необработанный XML. Объект XmlReader следует закрыть сразу же после получения данных.

Получение данных и метаданных

Чтобы воспользоваться классом XmlReader для получения данных, выполните следующие шаги:

  1. Создайте новый экземпляр объекта.

    Для создания нового экземпляра класса XmlReader вызывается метод Execute или ExecuteXmlReader объекта AdomdCommand.

  2. Выполните получение данных.

    После того, как команда выполнит запрос и возвратит объект XmlReader, необходимо произвести синтаксический анализ данных и метаданных. Данные и метаданные XML представлены в собственном формате, который использует поставщик XML для аналитики. Для большинства поставщиков XML для аналитики собственным является формат MDDataSet. Формат MDDataSet предоставляет данные и метаданные наборов ячеек в хорошо структурированной форме. Дополнительные сведения о формате MDDataSet см. в спецификации XML для аналитики.

  3. Закройте модуль чтения.

    После завершения работы с объектом 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();
        }