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


Как задать параметры курсора (ODBC)

Чтобы задать параметры курсора, вызовите SQLSetStmtAttr для установки или SQLGetStmtAttr для получения параметров инструкции, которые управляют поведением курсора.

Атрибут

Указывает

SQL_ATTR_CURSOR_TYPE

Однопроходный, статический, динамический или управляемый набором ключей тип курсора

SQL_ATTR_CONCURRENCY

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

SQL_ATTR_ROW_ARRAY_SIZE

Количество строк, получаемых при каждой выборке

SQL_ATTR_CURSOR_SENSITIVITY

Курсор, который показывает или не показывает обновления строк курсора, внесенные другими соединениями

SQL_ATTR_CURSOR_SCROLLABLE

Курсор, который может прокручиваться вперед и назад

Значения по умолчанию для этих атрибутов (однопроходный, только для чтения, размер набора строк, равный 1) не используют серверные курсоры. Для использования серверных курсоров по крайней мере одному из этих атрибутов должно быть задано значение, отличное от значения по умолчанию, а выполняемая инструкция должна быть единственной инструкцией SELECT или хранимой процедурой, содержащей единственную инструкцию SELECT. При использовании серверных курсоров инструкции SELECT не могут задействовать предложения, не поддерживаемые серверными курсорами: COMPUTE, COMPUTE BY, FOR BROWSE и INTO.

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

Пример

В следующем образце выделяется дескриптор инструкции, устанавливается динамический тип курсора и оптимистический параллелизм с управлением версиями строк, а затем выполняется инструкция SELECT.

retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);retcode = SQLSetStmtAttr(hstmt1, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER)SQL_CURSOR_DYNAMIC, _IS_INTEGER);retcode = SQLSetStmtAttr(hstmt1, SQL_ATTR_CONCURRENCY, SQLPOINTER)SQL_CONCUR_ROWVER, _IS_INTEGER);retcode = SQLExecDirect(hstmt1, SELECT au_lname FROM authors", SQL_NTS);

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

retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);// Set the cursor options and execute the statement.retcode = SQLSetStmtAttr(hstmt1, SQL_ATTR_CURSOR_SCROLLABLE, SQLPOINTER)SQL_SCROLLABLE, _IS_INTEGER);retcode = SQLSetStmtAttr(hstmt1, SQL_ATTR_CURSOR_SENSITIVITY, SQLPOINTER)SQL_INSENSITIVE, _IS_INTEGER);retcode = SQLExecDirect(hstmt1, select au_lname from authors", SQL_NTS);

См. также

Другие ресурсы