Получение строк

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

Когда потребитель получает указатель интерфейса в наборе строк, первый шаг обычно определяет возможности набора строк с помощью метода IRowsetInfo::GetProperties . Это возвращает сведения об интерфейсах, предоставляемых набором строк, а также о возможностях набора строк, которые не отображаются в виде отдельных интерфейсов, таких как максимальное количество активных строк и количество строк, которые могут содержать ожидающие обновления одновременно.

Следующим шагом для потребителей является определение характеристик или метаданных столбцов в наборе строк. Для этого они используют метод IColumnsInfo для простых сведений о столбцах или метода IColumnsRowset для расширенных сведений о столбцах. Метод GetColumnInfo возвращает следующие сведения:

  • Количество столбцов в результирующем наборе.

  • Массив структур DBCOLUMNINFO, по одному на столбец.

    Порядок структур — это порядок, в котором столбцы отображаются в наборе строк. Каждая структура DBCOLUMNINFO включает метаданные столбца, такие как имя столбца, порядковый номер столбца, максимальная длина значения в столбце, тип данных столбца, точность и длина.

  • Указатель на хранилище для всех строковых значений в одном блоке выделения.

Потребитель определяет, какие столбцы он нуждается в метаданных или на основе текстовой команды, создавшей набор строк. Он определяет порядковые номера необходимых столбцов из порядка сведений о столбцах, возвращаемых IColumnsInfo или порядковых значений в наборе строк метаданных столбца, возвращаемом IColumnsRowset.

Интерфейсы IColumnsInfo и IColumnsRowset используются для извлечения сведений о столбцах в наборе строк. Интерфейс IColumnsInfo возвращает ограниченный набор сведений, а IColumnsRowset предоставляет все метаданные.

Замечание

В SQL Server версии 7.0 и более ранних версиях необязательный столбец метаданных DBCOLUMN_COMPUTEMODE, возвращаемый IColumnsInfo::GetColumnsInfo , возвращает DBSTATUS_S_ISNULL (вместо значений, описывающих вычисление столбца), так как он не может быть определен, вычисляется ли базовый столбец.

Порядковые номера используются для указания привязки к столбцу. Привязка — это структура, которая связывает элемент структуры потребителя со столбцом. Привязка может привязать значение данных, длину и значение состояния столбца.

Набор привязок собирается вместе в методе доступа. Это создается с помощью метода IAccessor::CreateAccessor . Метод доступа может содержать несколько привязок, чтобы данные для нескольких столбцов можно получить или задать в одном вызове. Потребитель может создать несколько методов доступа для сопоставления различных шаблонов использования в разных частях приложения. Он может создавать и освобождать методы доступа, пока набор строк остается в существовании.

Чтобы получить строки из базы данных, потребитель вызывает метод, например IRowset::GetNextRows или IRowsetLocate::GetRowsAt. Эти операции получения помещают данные строк с сервера в буфер строк поставщика. Потребитель не имеет прямого доступа к буферу строк поставщика. Потребитель использует IRowset::GetData для копирования данных из буфера поставщика в буфер потребителя и IRowsetChange::SetData для копирования изменений данных из буфера потребителя в буфер поставщика.

Потребитель вызывает метод GetData и передает дескриптор в строку, дескриптор доступа и указатель на выделенный потребителем буфер. GetData преобразует данные и возвращает столбцы, указанные в привязках, используемых для создания метода доступа. Потребитель может вызывать GetData несколько раз для строки, используя различные методы доступа и буферы, поэтому потребитель может получить несколько копий одних и того же данных.

Данные из столбцов переменной длины можно обрабатывать несколькими способами. Во-первых, такие столбцы можно привязать к конечному разделу структуры потребителя. Это приводит к усечению, когда длина данных превышает длину буфера. Потребитель может определить, что усечение произошло, проверив состояние DBSTATUS_S_TRUNCATED. Возвращаемая длина всегда является истинной длиной в байтах, чтобы потребитель также смог определить, сколько данных было усечено.

После завершения получения или обновления строк потребитель освобождает их с помощью метода ReleaseRows . Это освобождает ресурсы из копии строк в наборе строк и делает местом для новых строк. Затем потребитель может повторить цикл получения или создания строк и доступа к данным в них.

Когда потребитель завершит работу с набором строк, он вызывает метод IAccessor::ReleaseAccessor , чтобы освободить любой метод доступа. Он вызывает метод IUnknown::Release во всех интерфейсах, предоставляемых набором строк, чтобы освободить набор строк. Когда набор строк освобождается, он принудительно освобождает все оставшиеся строки или методы доступа, которые потребитель может хранить.

В этом разделе

См. также

Наборы строк