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


Размер набора строк курсора

Возможности курсоров ODBC не ограничены выбором только одной строки за один раз. При каждом вызове метода SQLFetch или SQLFetchScroll они могут извлекать несколько строк. При работе с базой данных типа Microsoft SQL Server в режиме клиент-сервер значительно эффективнее извлекать несколько строк за один раз. Число строк, возвращаемых при извлечении, называется размером набора строк и указывается при помощи параметра SQL_ATTR_ROW_ARRAY_SIZE функции SQLSetStmtAttr.

SQLUINTEGER uwRowsize;SQLSetStmtAttr(m_hstmt, SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER)uwRowsetSize, SQL_IS_UINTEGER);

Курсоры, имеющие размер набора строк более 1, называются блочными курсорами.

Есть два варианта привязки столбцов набора строк для блочных курсоров:

  • Привязка на уровне столбца

    Каждый столбец привязывается к массиву переменных. Число элементов в каждом массиве равно размеру набора строк.

  • Привязка на уровне строки

    Массив создается с использованием структур, которые содержат данные и индикаторы для всех столбцов в строке. Число структур в массиве равно размеру набора строк.

Когда используется привязка на уровне столбца или строки, при каждом вызове метода SQLFetch или SQLFetchScroll привязанный массив заполняется данными из извлеченного набора строк.

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

Драйвер ODBC собственного клиента SQL Server обеспечивает оптимизацию за счет использования наборов строк для быстрого извлечения всего результирующего набора. Чтобы использовать эту оптимизацию, установите атрибутам курсора значения по умолчанию (последовательный доступ, только для чтения, размер набора строк = 1) во время вызова метода SQLExecDirect или SQLExecute. Драйвер ODBC собственного клиента SQL Server задает результирующий набор по умолчанию. Это более эффективно, чем использование серверных курсоров при передаче результатов клиенту без прокрутки. После выполнения инструкции увеличьте размер набора строк и примените привязку на уровне столбца или строки. Это позволит SQL Server использовать результирующий набор по умолчанию, чтобы эффективно отправлять клиенту результирующие строки, в то время как драйвер ODBC собственного клиента SQL Server непрерывно извлекает строки из сетевых буферов на клиенте.

См. также

Основные понятия