Быстрые однопроходные курсоры (ODBC)

Драйвер ODBC для собственного клиента SQL Server, когда соединен с экземпляром SQL Server, поддерживает оптимизации производительности для однопроходных курсоров только для чтения. Быстрые однопроходные курсоры реализуются внутренне драйвером и сервером способом, очень похожим на результирующие наборы по умолчанию. Кроме того, имея высокую производительность, быстрые однопроходные курсоры обладают следующими характеристиками:

  • Функция SQLGetData не поддерживается. Столбцы результирующего набора должны быть привязаны к переменным программы.

  • Когда сервер достигает конца курсора, он автоматически закрывает курсор. Тем не менее, приложение должно вызвать функцию SQLCloseCursor или SQLFreeStmt(SQL_CLOSE), но драйверу не придется отправлять серверу запрос на закрытие. Это экономит обращение через сеть к серверу.

Приложение запрашивает быстрые однопроходные курсоры при помощи атрибута инструкции SQL_SOPT_SS_CURSOR_OPTIONS, зависящего от драйвера. При установке в значение SQL_CO_FFO быстрые однопроходные курсоры разрешаются без автоматической выборки. При установке в значение SQL_CO_FFO_AF разрешен параметр автоматической выборки. Дополнительные сведения об автоматической выборке см. в разделе Использование автоматической выборки с курсорами ODBC.

Быстрые однопроходные курсоры с автоматической выборкой можно использовать для получения небольшого результирующего набора с однократным обращением к серверу. В описании этих шагов n является возвращаемым количеством строк.

  1. Установите SQL_SOPT_SS_CURSOR_OPTIONS в значение SQL_CO_FFO_AF.

  2. Установите SQL_ATTR_ROW_ARRAY_SIZE в значение n + 1.

  3. Свяжите столбцы результата с массивами из n + 1 элементов (для гарантии безопасности, если будет фактически выбрана n + 1 строка).

  4. Откройте курсор при помощи либо функции SQLExecDirect, либо функции SQLExecute.

  5. Если возвращаемое состояние равно SQL_SUCCESS, вызовите затем функцию SQLFreeStmt или SQLCloseCursor, чтобы закрыть курсор. Все данные для строк будут находиться в связанных программных переменных.

Выполняя эти шаги, функция SQLExecDirect или SQLExecute отправляет запрос на открытие курсора с включенным параметром автоматической выборки. В ответ на этот отдельный запрос от клиента сервер:

  • Открывает курсор.

  • Строит результирующий набор и отправляет строки клиенту.

  • Так как размер набора строк был установлен в значение на 1 большее, чем число строк результирующего набора, сервер определяет конец курсора и закрывает его.