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


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

При извлечении аналитических данных объект AdomdDataReader обеспечивает хороший баланс между затратами и интерактивностью. Объект AdomdDataReader извлекает из источника аналитических данных плоский поток данных, доступных только для чтения и последовательного доступа. Этот небуферизованный поток данных позволяет процедурам последовательно обрабатывать получаемые из источника данных результаты с высокой эффективностью. Благодаря этому объект AdomdDataReader хорошо подходит для извлечения больших объемов данных в целях отображения, поскольку данные не кэшируются в памяти.

Кроме того, объект AdomdDataReader также может повышать производительность приложения за счет извлечения данных по мере их поступления, не дожидаясь возвращения полных результатов запроса. Объект AdomdDataReader также сокращает затраты системных ресурсов, так как, по умолчанию, этот модуль чтения хранит в памяти только одну строку за раз.

Платой за оптимизированную производительность является то, что объект AdomdDataReader предоставляет меньше сведений об извечных данных, чем другие методы получения данных. Объект AdomdDataReader не поддерживает большие модели объектов для представления данных или метаданных, кроме того, эта модель объекта также не позволяет использовать более сложные аналитические функции, как, например обратная запись в ячейку. Однако объект AdomdDataReader все же предоставляет набор строго типизированных методов для извлечения данных набора ячеек, а также метод для извлечения метаданных набора ячеек в табличном формате. Кроме того, объект AdomdDataReader реализует интерфейс IDbDataReader для поддержки привязки данных и извлечения данных при помощи метода SelectCommand из пространства имен System.Data библиотеки классов платформы Microsoft .NET Framework.

Извлечение данных из AdomdDataReader

Чтобы получить данные с помощью объекта AdomdDataReader, выполните следующие действия.

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

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

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

    По мере выполнения командой запроса компонент ADOMD.NET возвращает результаты в формате Resultset, табличном формате, описанном в спецификации протокола XML для аналитики, чтобы преобразовать данные в плоскую форму для объекта AdomdDataReader. С учетом переменной размерности аналитических данных табличный формат при запросе к ним используется редко.

    Компонент ADOMD.NET хранит эти табличные результаты в сетевом буфере на клиенте, пока они не будут запрошены при помощи одного из следующих методов:

    • Вызовите метод Read объекта AdomdDataReader.

      Метод Read получает строку из результатов запроса. Затем можно будет передать имя или порядковый номер столбца свойству Item, чтобы получить доступ к каждому столбцу возвращенной строки. Например, имя первого столбца текущей строки — ColumnName. В этом случае либо метод reader[0].ToString(), либо метод reader["ColumnName"].ToString() возвратит содержимое первого столбца в текущей строке.

    • Вызовите один из типизированных методов доступа.

      Объект AdomdDataReader предоставляет ряд типизированных методов доступа — тех методов, которые позволяют получать доступ к значениям столбцов в собственных типах данных. Если базовый тип данных значения столбца известен, типизированный метод доступа позволяет сократить объем преобразования типов, необходимый при извлечении значения столбца, обеспечивая, тем самым, наивысшую производительность.

      Некоторые типизированные методы доступа — GetDateTime, GetDouble и GetInt32. Полный список типизированных методов доступа см. в разделе AdomdDataReader.

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

    После завершения работы с объектом AdomdDataReader необходимо вызывать метод Close. Пока открыт экземпляр объекта AdomdDataReader, метод AdomdConnection используется исключительно этим объектом AdomdDataReader. Пока не будет закрыт исходный объект AdomdDataReader, выполнить какую-либо команду для экземпляра объекта AdomdConnection, включая создание другого объекта AdomdDataReader или System.Xml.XmlReader будет невозможно.

Пример извлечения данных из AdomdDataReader

В следующем примере кода просматриваются результаты, возвращенные объектом AdomdDataReader и возвращаются два первых значения для каждой строки в виде строк.

If Reader.HasRows Then
    Do While objReader.Read()
        Console.WriteLine(vbTab & "{0}" & vbTab & "{1}", _
            objReader.GetString(0), objReader.GetString(1))
    Loop
Else
  Console.WriteLine("No rows returned.")
End If

objReader.Close()
if (objReader.HasRows)
  while (objReader.Read())
    Console.WriteLine("\t{0}\t{1}", _
        objReader.GetString(0), objReader.GetString(1));
else
  Console.WriteLine("No rows returned.");

objReader.Close();

Извлечение метаданных из AdomdDataReader

Пока открыт экземпляр объекта AdomdDataReader, при помощи метода GetSchemaTable можно извлечь данные схемы, или метаданные, о текущем наборе записей. Метод GetSchemaTable возвращает объект DataTable, заполненный данными схемы для текущего набора записей. Объект DataTable содержит одну строку для каждого столбца набора записей. Каждый столбец строки таблицы схемы соответствует свойству столбца, возвращенного в наборе ячеек, где ColumnName — это имя свойства, а значение столбца — это значение свойства.

Пример извлечения метаданных из AdomdDataReader

В следующем примере кода на консоль выводятся данные схемы для объекта AdomdDataReader.

Dim schemaTable As DataTable = objReader.GetSchemaTable()

Dim objRow As DataRow
Dim objColumn As DataColumn

For Each objRow In schemaTable.Rows
  For Each objColumn In schemaTable.Columns
    Console.WriteLine(objColumn.ColumnName & " = " & objRow(objColumn).ToString())
  Next
  Console.WriteLine()
Next
DataTable schemaTable = objReader.GetSchemaTable();
foreach (DataRow objRow in schemaTable.Rows)
{
  foreach (DataColumn objColumn in schemaTable.Columns)
    Console.WriteLine(objColumn.ColumnName + " = " + objRow[objColumn]);
  Console.WriteLine();
}

Извлечение нескольких результирующих наборов

Интеллектуальный анализ данных поддерживает концепцию вложенных таблиц, которые ADOMD.NET выдает, как вложенные наборы строк. Чтобы извлечь вложенный набор строк, связанный с каждой строкой, вызывается метод GetDataReader.