Как задать параметры курсора (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);