Выборка строк
Интерфейс 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 для всех интерфейсов, предоставленных набором строк, для освобождения набора строк. После освобождения набора строк принудительно освобождаются все оставшиеся строки или методы доступа, которые могут удерживаться потребителем.