Переходы подключения
Подключения ODBC имеют следующие состояния.
State | Description |
---|---|
C0 | Нераспределенная среда, нераспределированное подключение |
C1 | Выделенная среда, нераспределированное подключение |
C2 | Выделенная среда, выделенное подключение |
C3 | Для функции подключения требуются данные |
C4 | Подключено подключение |
C5 | Подключено подключение, выделенная инструкция |
C6 | Подключено подключение, транзакция выполняется. Подключение может находиться в состоянии C6 без инструкций, выделенных для подключения. Например, предположим, что подключение находится в режиме фиксации вручную и находится в состоянии C4. Если инструкция выделена, выполнена (запуск транзакции), а затем освобождена, транзакция остается активной, но в соединении нет инструкций. |
В следующих таблицах показано, как каждая функция ODBC влияет на состояние подключения.
SQLAllocHandle
C0 Нет Env. |
C1 Unallocated | C2 Распределено |
C3 Требуются данные |
C4 Connected |
C5 Оператор |
C6 Транзакция |
---|---|---|---|---|---|---|
C1[1] | --[5] | --[5] | --[5] | --[5] | --[5] | --[5] |
(IH)[2] | C2 | --[5] | --[5] | --[5] | --[5] | --[5] |
(IH)[3] | (IH) | (08003) | (08003) | C5 | --[5] | --[5] |
(IH)[4] | (IH) | (08003) | (08003) | --[5] | --[5] | --[5] |
[1] Эта строка показывает переходы при SQL_HANDLE_ENV HandleType .
[2] Эта строка показывает переходы при SQL_HANDLE_DBC HandleType .
[3] Эта строка показывает переходы при SQL_HANDLE_STMT HandleType .
[4] Эта строка показывает переходы при SQL_HANDLE_DESC HandleType .
[5] Вызов SQLAllocHandle с outputHandlePtr , указывающий на допустимые перезаписи дескрипторов, которые обрабатываются без учета предыдущего содержимого дескриптора, и могут вызвать проблемы с драйверами ODBC. Неправильное программирование приложения ODBC для вызова SQLAllocHandle дважды с той же переменной приложения, определенной для *OutputHandlePtr без вызова SQLFreeHandle, чтобы освободить дескриптор перед перераспредещением. Перезапись дескрипторов ODBC таким образом может привести к несогласованному поведению или ошибкам со стороны драйверов ODBC.
SQLBrowseConnect
C0 Нет Env. |
C1 Не выделено |
C2 Распределено |
C3 Требуются данные |
C4 Connected |
C5 Оператор |
C6 Транзакция |
---|---|---|---|---|---|---|
(IH) | (IH) | C3 [d] C4 [s] | -- [d] C2 [e] C4 [s] | (08002) | (08002) | (08002) |
SQLCloseCursor
C0 Нет Env. |
C1 Не выделено |
C2 Распределено |
C3 Требуются данные |
C4 Connected |
C5 Оператор |
C6 Транзакция |
---|---|---|---|---|---|---|
(IH) | (IH) | (IH) | (IH) | (IH) | -- | --[1] C5[2] |
[1] Подключение было в режиме ручной фиксации.
[2] Подключение было в режиме автоматической фиксации.
SQLColumnPrivileges, SQLColumns, SQLForeignKeys, SQLGetTypeInfo, SQLPrimaryKeys, SQLProcedureColumns, SQLProcedureColumns, SQLSpecialColumns, SQLStatistics, SQLTablePrivileges и SQLTable
C0 Нет Env. |
C1 Не выделено |
C2 Распределено |
C3 Требуются данные |
C4 Connected |
C5 Оператор |
C6 Транзакция |
---|---|---|---|---|---|---|
(IH) | (IH) | (IH) | (IH) | (IH) | --[1] C6[2] | -- |
[1] Подключение было в режиме автоматической фиксации, или источник данных не начал транзакцию.
[2] Подключение было в режиме ручной фиксации, и источник данных начал транзакцию.
SQLConnect
C0 Нет Env. |
C1 Не выделено |
C2 Распределено |
C3 Требуются данные |
C4 Connected |
C5 Оператор |
C6 Транзакция |
---|---|---|---|---|---|---|
(IH) | (IH) | C4 | (08002) | (08002) | (08002) | (08002) |
SQLCopyDesc, SQLGetDescField, SQLGetDescRec, SQLSetDescField и SQLSetDescRec
C0 Нет Env. |
C1 Не выделено |
C2 Распределено |
C3 Требуются данные |
C4 Connected |
C5 Оператор |
C6 Транзакция |
---|---|---|---|---|---|---|
(IH) | (IH) | (IH) | (IH) | --[1] | -- | -- |
[1] В этом состоянии только дескрипторы, доступные приложению, явно выделяются дескрипторами.
SQLDataSources и SQLDrivers
C0 Нет Env. |
C1 Не выделено |
C2 Распределено |
C3 Требуются данные |
C4 Connected |
C5 Оператор |
C6 Транзакция |
---|---|---|---|---|---|---|
(IH) | -- | -- | -- | -- | -- | -- |
SQLDisconnect
C0 Нет Env. |
C1 Не выделено |
C2 Распределено |
C3 Требуются данные |
C4 Connected |
C5 Оператор |
C6 Транзакция |
---|---|---|---|---|---|---|
(IH) | (IH) | (08003) | C2 | C2 | C2 | 25 000 |
SQLDriverConnect
C0 Нет Env. |
C1 Не выделено |
C2 Распределено |
C3 Требуются данные |
C4 Connected |
C5 Оператор |
C6 Транзакция |
---|---|---|---|---|---|---|
(IH) | (IH) | C4 s -- n[f] | (08002) | (08002) | (08002) | (08002) |
SQLEndTran
C0 Нет Env. |
C1 Не выделено |
C2 Распределено |
C3 Требуются данные |
C4 Connected |
C5 Оператор |
C6 Транзакция |
---|---|---|---|---|---|---|
(IH)[1] | --[3] | --[3] | --[3] | -- | -- | --[4] или ([5], [6], и [8]) C4[5] и [7] C5[5], [6], и [9] |
(IH)[2] | (IH) | (08003) | (08003) | -- | -- | C5 |
[1] Эта строка показывает переходы при SQL_HANDLE_ENV HandleType .
[2] Эта строка показывает переходы при SQL_HANDLE_DBC HandleType .
[3] Так как подключение не находится в подключенном состоянии, оно не влияет на транзакцию.
[4] Сбой фиксации или отката подключения. Функция возвращает SQL_ERROR в этом случае.
[5] Фиксация или откат выполнена успешно в соединении. Функция возвращает SQL_ERROR, если фиксация или откат не выполнена в другом соединении, или функция возвращает SQL_SUCCESS, если фиксация или откат выполнена успешно во всех подключениях.
[6] Существовал по крайней мере один оператор, выделенный для подключения.
[7] В соединении не было выделено никаких инструкций.
[8] Подключение имело по крайней мере одну инструкцию, для которой был открытый курсор, и источник данных сохраняет курсоры при фиксации или откате транзакций, в зависимости от того, SQL_COMMIT или SQL_ROLLBACK. Дополнительные сведения см. в атрибутах SQL_CURSOR_COMMIT_BEHAVIOR и SQL_CURSOR_ROLLBACK_BEHAVIOR в SQLGetInfo.
[9] Если подключение имело какие-либо операторы, для которых были открытые курсоры, курсоры не сохранялись при фиксации или откате транзакции.
SQLExecDirect и SQLExecute
C0 Нет Env. |
C1 Не выделено |
C2 Распределено |
C3 Требуются данные |
C4 Connected |
C5 Оператор |
C6 Транзакция |
---|---|---|---|---|---|---|
(IH) | (IH) | (IH) | (IH) | (IH) | --[1] C6[2] C6[3] | -- |
[1] Подключение было в режиме автоматической фиксации, и выполненная инструкция не была спецификацией курсора (например, инструкцией SELECT); или соединение было в режиме ручной фиксации, и инструкция, выполненная не была транзакцией.
[2] Подключение было в режиме автоматической фиксации, и инструкция, выполненная, была спецификацией курсора (например, инструкцией SELECT).
[3] Подключение было в режиме ручной фиксации, и источник данных начал транзакцию.
SQLFreeHandle
C0 Нет Env. |
C1 Не выделено |
C2 Распределено |
C3 Требуются данные |
C4 Connected |
C5 Оператор |
C6 Транзакция |
---|---|---|---|---|---|---|
(IH)[1] | C0 | (HY010) | (HY010) | (HY010) | (HY010) | (HY010) |
(IH)[2] | (IH) | (C1) | (HY010) | (HY010) | (HY010) | (HY010) |
(IH)[3] | (IH) | (IH) | (IH) | (IH) | C4[5] --[6] | --[7] C4[5] и [8] C5[6] и [8] |
(IH)[4] | (IH) | (IH) | (IH) | -- | -- | -- |
[1] Эта строка показывает переходы при SQL_HANDLE_ENV HandleType .
[2] Эта строка показывает переходы при SQL_HANDLE_DBC HandleType .
[3] Эта строка показывает переходы при SQL_HANDLE_STMT HandleType .
[4] Эта строка показывает переходы при SQL_HANDLE_DESC HandleType .
[5] Существовал только один оператор, выделенный для подключения.
[6] В соединении было выделено несколько операторов.
[7] Подключение было в режиме ручной фиксации.
[8] Подключение было в режиме автоматической фиксации.
Функция SQLFreeStmt
C0 Нет Env. |
C1 Не выделено |
C2 Распределено |
C3 Требуются данные |
C4 Connected |
C5 Оператор |
C6 Транзакция |
---|---|---|---|---|---|---|
(IH)[1] | (IH) | (IH) | (IH) | (IH) | -- | C5[3] --[4] |
(IH)[2] | (IH) | (IH) | (IH) | (IH) | -- | -- |
[1] Эта строка показывает транзакции, когда аргумент Option SQL_CLOSE.
[2] Эта строка показывает транзакции, когда аргумент Option SQL_UNBIND или SQL_RESET_PARAMS.
[3] Подключение было в режиме автоматической фиксации, и курсоры не были открыты для любых инструкций, кроме этого.
[4] Подключение было в режиме ручной фиксации или было в режиме автоматической фиксации, и курсор был открыт по крайней мере на одну другую инструкцию.
SQLGetConnectAttr
C0 Нет Env. |
C1 Не выделено |
C2 Распределено |
C3 Требуются данные |
C4 Connected |
C5 Оператор |
C6 Транзакция |
---|---|---|---|---|---|---|
IH | IH | --[1] 08003[2] | HY010 | -- | -- | -- |
[1] Аргумент атрибута был SQL_ATTR_ACCESS_MODE, SQL_ATTR_AUTOCOMMIT, SQL_ATTR_LOGIN_TIMEOUT, SQL_ATTR_ODBC_CURSORS, SQL_ATTR_TRACE или SQL_ATTR_TRACEFILE или был задан для атрибута подключения.
[2] Аргумент атрибута не был SQL_ATTR_ACCESS_MODE, SQL_ATTR_AUTOCOMMIT, SQL_ATTR_LOGIN_TIMEOUT, SQL_ATTR_ODBC_CURSORS, SQL_ATTR_TRACE или SQL_ATTR_TRACEFILE, а для атрибута подключения не задано значение.
SQLGetDiagField и SQLGetDiagRec
C0 Нет Env. |
C1 Не выделено |
C2 Распределено |
C3 Требуются данные |
C4 Connected |
C5 Оператор |
C6 Транзакция |
---|---|---|---|---|---|---|
(IH)[1] | -- | -- | -- | -- | -- | -- |
(IH)[2] | (IH) | -- | -- | -- | -- | -- |
(IH)[3] | (IH) | (IH) | (IH) | (IH) | -- | -- |
(IH)[4] | (IH) | (IH) | (IH) | -- | -- | -- |
[1] Эта строка показывает переходы при SQL_HANDLE_ENV HandleType .
[2] Эта строка показывает переходы при SQL_HANDLE_DBC HandleType .
[3] Эта строка показывает переходы при SQL_HANDLE_STMT HandleType .
[4] Эта строка показывает переходы при SQL_HANDLE_DESC HandleType .
SQLGetEnvAttr
C0 Нет Env. |
C1 Не выделено |
C2 Распределено |
C3 Требуются данные |
C4 Connected |
C5 Оператор |
C6 Транзакция |
---|---|---|---|---|---|---|
IH | -- | -- | -- | -- | -- | -- |
SQLGetFunctions
C0 Нет Env. |
C1 Не выделено |
C2 Распределено |
C3 Требуются данные |
C4 Connected |
C5 Оператор |
C6 Транзакция |
---|---|---|---|---|---|---|
IH | IH | HY010 | HY010 | -- | -- | -- |
SQLGetInfo
C0 Нет Env. |
C1 Не выделено |
C2 Распределено |
C3 Требуются данные |
C4 Connected |
C5 Оператор |
C6 Транзакция |
---|---|---|---|---|---|---|
IH | IH | --[1] 08003[2] | 08003 | -- | -- | -- |
[1] Аргумент InfoType был SQL_ODBC_VER.
[2] Аргумент InfoType не был SQL_ODBC_VER.
SQLMoreResults
C0 Нет Env. |
C1 Не выделено |
C2 Распределено |
C3 Требуются данные |
C4 Connected |
C5 Оператор |
C6 Транзакция |
---|---|---|---|---|---|---|
(IH) | (IH) | (IH) | (IH) | (IH) | --[1] C6[2] | --[3] C5[1] |
[1] Подключение было в режиме автоматической фиксации, и вызов SQLMoreResults не инициализировал обработку результирующий набор спецификации курсора.
[2] Подключение было в режиме автоматической фиксации, и вызов SQLMoreResults инициализировал обработку результирующий набор спецификации курсора.
[3] Подключение было в режиме ручной фиксации.
SQLNativeSql
C0 Нет Env. |
C1 Не выделено |
C2 Распределено |
C3 Требуются данные |
C4 Connected |
C5 Оператор |
C6 Транзакция |
---|---|---|---|---|---|---|
(IH) | (IH) | (08003) | (08003) | -- | -- | -- |
SQLPrepare
C0 Нет Env. |
C1 Не выделено |
C2 Распределено |
C3 Требуются данные |
C4 Connected |
C5 Оператор |
C6 Транзакция |
---|---|---|---|---|---|---|
(IH) | (IH) | (IH) | (IH) | (IH) | --[1] C6[2] | -- |
[1] Подключение было в режиме автоматической фиксации, или источник данных не начал транзакцию.
[2] Подключение было в режиме ручной фиксации, и источник данных начал транзакцию.
SQLSetConnectAttr
C0 Нет Env. |
C1 Не выделено |
C2 Распределено |
C3 Требуются данные |
C4 Connected |
C5 Оператор |
C6 Транзакция |
---|---|---|---|---|---|---|
IH | IH | --[1] 08003[2] | HY010 | --[3] 08002[4] HY011[5] | --[3] 08002[4] HY011[5] | --[3] и [6] C5[8] 08002[4] HY011[5] или [7] |
[1] Аргумент атрибута не был SQL_ATTR_TRANSLATE_LIB или SQL_ATTR_TRANSLATE_OPTION.
[2] Аргумент атрибута был SQL_ATTR_TRANSLATE_LIB или SQL_ATTR_TRANSLATE_OPTION.
[3] Аргумент атрибута не был SQL_ATTR_ODBC_CURSORS или SQL_ATTR_PACKET_SIZE.
[4] Аргумент атрибута был SQL_ATTR_ODBC_CURSORS.
[5] Аргумент атрибута был SQL_ATTR_PACKET_SIZE.
[6] Аргумент атрибута не был SQL_ATTR_AUTOCOMMIT, или аргумент атрибута был SQL_ATTR_AUTOCOMMIT, и установка этого атрибута не зафиксировала транзакцию.
[7] Аргумент атрибута был SQL_ATTR_TXN_ISOLATION.
[8] Аргумент атрибута был SQL_ATTR_AUTOCOMMIT и задал этот атрибут фиксации транзакции.
SQLSetEnvAttr
C0 Нет Env. |
C1 Не выделено |
C2 Распределено |
C3 Требуются данные |
C4 Connected |
C5 Оператор |
C6 Транзакция |
---|---|---|---|---|---|---|
(IH) | -- | -- | (HY010) | -- | -- | -- |
Все остальные функции ODBC
C0 Нет Env. |
C1 Не выделено |
C2 Распределено |
C3 Требуются данные |
C4 Connected |
C5 Оператор |
C6 Транзакция |
---|---|---|---|---|---|---|
(IH) | (IH) | (IH) | (IH) | (IH) | -- | -- |