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


Получение данных с помощью объекта 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. Закройте модуль чтения.

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

Пример извлечения данных из 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.

См. также

Справочник

Получение данных из источника аналитических данных

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

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