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


Использование курсоров (ODBC)

Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure azure Synapse Analytics Analytics Platform System (PDW)

Использование курсоров

  1. Вызовите функцию SQLSetStmtAttr, чтобы задать нужные атрибуты курсора:

    Задайте атрибуты SQL_ATTR_CURSOR_TYPE и SQL_ATTR_CONCURRENCY (этот параметр предпочтителен).

    Or

    Задайте атрибуты SQL_CURSOR_SCROLLABLE и SQL_CURSOR_SENSITIVITY.

  2. Вызовите метод SQLSetStmtAttr для установки размера набора строк с помощью атрибута SQL_ATTR_ROW_ARRAY_SIZE.

  3. По желанию можно вызвать функцию SQLSetCursorName для задания имени курсора, если позиционированные обновления предполагается проводить с помощью предложения WHERE CURRENT OF.

  4. Выполните инструкцию SQL.

  5. По желанию можно вызвать функцию SQLGetCursorName для получения имени курсора, если позиционированные обновления предполагается проводить с помощью предложения WHERE CURRENT OF, а имя курсора не было задано с помощью функции SQLSetCursorName на шаге 3.

  6. Вызовите функцию SQLNumResultCols для получения числа столбцов (C) в наборе строк.

    Используйте привязку по столбцам.

    - или -

    Используйте привязку на уровне строки.

  7. Получайте наборы строк из курсора по мере необходимости.

  8. Вызовите функцию SQLMoreResults, чтобы определить, доступен ли другой результирующий набор.

    • Если вернулось значение SQL_SUCCESS, то доступен другой результирующий набор.

    • Если вернулось значение SQL_NO_DATA, то больше нет результирующих наборов.

    • Если вернулось значение SQL_SUCCESS_WITH_INFO или SQL_ERROR, вызовом функции SQLGetDiagRec определите, есть ли выходные данные от инструкции PRINT или RAISERROR.

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

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

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

  9. Можно также вызвать функцию SQLFreeStmt с SQL_UNBIND, чтобы освободить все буферы связанных столбцов.

  10. Если есть еще один результирующий набор, перейдите к шагу 6.

    На шаге 9 вызов функции SQLMoreResults на частично обработанном результирующем наборе очистит оставшиеся результаты из набора. Другой способ очистки частично обработанного результирующего набора — вызов функции SQLCloseCursor.

    Типом курсора можно управлять, задавая параметры SQL_ATTR_CURSOR_TYPE и SQL_ATTR_CONCURRENCY либо SQL_ATTR_CURSOR_SENSITIVITY и SQL_ATTR_CURSOR_SCROLLABLE. Не следует смешивать два метода задания режима работы курсоров.

См. также

Инструкции по использованию курсоров (ODBC)