连接转换
ODBC 连接具有以下状态。
状态 | 说明 |
---|---|
C0 | 未分配的环境、未分配的连接 |
C1 | 分配的环境,未分配的连接 |
C2 | 分配的环境、已分配的连接 |
C3 | 连接函数需要数据 |
C4 | 已连接连接 |
C5 | Connected connection, allocated 语句 |
C6 | 已连接连接,事务正在进行中。 连接可能处于状态 C6,且未在连接上分配任何语句。 例如,假设连接处于手动提交模式,并且处于 C4 状态。 如果已分配语句, (启动事务) 执行,然后释放该语句,则该事务将保持活动状态,但连接上没有语句。 |
下表显示了每个 ODBC 函数如何影响连接状态。
SQLAllocHandle
C0 没有 Env。 |
C1 未分配 | C2 已分配 |
C3 需要数据 |
C4 已连接 |
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] 使用指向有效句柄的 OutputHandlePtr 调用 SQLAllocHandle 会覆盖该句柄,而不考虑该句柄的先前内容,并可能导致 ODBC 驱动程序出现问题。 使用为 OutputHandlePtr 定义的同一应用程序变量调用 SQLAllocHandle 两次,而不调用 SQLFreeHandle 以在重新分配句柄之前释放句柄,这是不正确的 ODBC 应用程序编程。 以这种方式覆盖 ODBC 句柄可能会导致 ODBC 驱动程序的行为不一致或错误。
SQLBrowseConnect
C0 没有 Env。 |
C1 未分配 |
C2 已分配 |
C3 需要数据 |
C4 已连接 |
C5 语句 |
C6 事务 |
---|---|---|---|---|---|---|
(IH) | (IH) | C3 [d] C4 [s] | -- [d] C2 [e] C4 [s] | (08002) | (08002) | (08002) |
SQLCloseCursor
C0 没有 Env。 |
C1 未分配 |
C2 已分配 |
C3 需要数据 |
C4 已连接 |
C5 语句 |
C6 事务 |
---|---|---|---|---|---|---|
(IH) | (IH) | (IH) | (IH) | (IH) | -- | --[1] C5[2] |
[1] 连接处于手动提交模式。
[2] 连接处于自动提交模式。
SQLColumnPrivileges、SQLColumns、SQLForeignKeys、SQLGetTypeInfo、SQLPrimaryKeys、SQLProcedureColumns、SQLProcedures、SQLSpecialColumns、SQLStatistics、SQLTablePrivileges 和 SQLTables
C0 无 Env。 |
C1 未分配 |
C2 已分配 |
C3 需要数据 |
C4 已连接 |
C5 语句 |
C6 事务 |
---|---|---|---|---|---|---|
(IH) | (IH) | (IH) | (IH) | (IH) | --[1] C6[2] | -- |
[1] 连接处于自动提交模式,或者数据源未开始事务。
[2] 连接处于手动提交模式,数据源开始事务。
SQLConnect
C0 无 Env。 |
C1 未分配 |
C2 已分配 |
C3 需要数据 |
C4 已连接 |
C5 语句 |
C6 事务 |
---|---|---|---|---|---|---|
(IH) | (IH) | C4 | (08002) | (08002) | (08002) | (08002) |
SQLCopyDesc、SQLGetDescField、SQLGetDescRec、SQLSetDescField 和 SQLSetDescRec
C0 无 Env。 |
C1 未分配 |
C2 已分配 |
C3 需要数据 |
C4 已连接 |
C5 语句 |
C6 事务 |
---|---|---|---|---|---|---|
(IH) | (IH) | (IH) | (IH) | --[1] | -- | -- |
[1] 在此状态下,应用程序唯一可用的描述符是显式分配的描述符。
SQLDataSources 和 SQLDrivers
C0 无 Env。 |
C1 未分配 |
C2 已分配 |
C3 需要数据 |
C4 已连接 |
C5 语句 |
C6 事务 |
---|---|---|---|---|---|---|
(IH) | -- | -- | -- | -- | -- | -- |
SQLDisconnect
C0 没有 Env。 |
C1 未分配 |
C2 已分配 |
C3 需要数据 |
C4 已连接 |
C5 语句 |
C6 事务 |
---|---|---|---|---|---|---|
(IH) | (IH) | (08003) | C2 | C2 | C2 | 25000 |
SQLDriverConnect
C0 没有 Env。 |
C1 未分配 |
C2 已分配 |
C3 需要数据 |
C4 已连接 |
C5 语句 |
C6 事务 |
---|---|---|---|---|---|---|
(IH) | (IH) | C4 s -- n[f] | (08002) | (08002) | (08002) | (08002) |
SQLEndTran
C0 没有 Env。 |
C1 未分配 |
C2 已分配 |
C3 需要数据 |
C4 已连接 |
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] 连接至少有一个语句,其中有一个打开的游标,并且数据源在提交或回滚事务时保留游标,根据 CompletionType 是SQL_COMMIT还是SQL_ROLLBACK) 应用 (。 有关详细信息,请参阅 SQLGetInfo 中的SQL_CURSOR_COMMIT_BEHAVIOR和SQL_CURSOR_ROLLBACK_BEHAVIOR属性。
[9] 如果连接有任何语句存在打开的游标,则提交或回滚事务时不会保留游标。
SQLExecDirect 和 SQLExecute
C0 没有 Env。 |
C1 未分配 |
C2 已分配 |
C3 需要数据 |
C4 已连接 |
C5 语句 |
C6 事务 |
---|---|---|---|---|---|---|
(IH) | (IH) | (IH) | (IH) | (IH) | --[1] C6[2] C6[3] | -- |
[1] 连接处于自动提交模式,并且执行的语句不是 游标规范 (例如 SELECT 语句) ;或连接处于手动提交模式,并且执行的语句未开始事务。
[2] 连接处于自动提交模式,执行的语句是 游标规范 (如 SELECT 语句) 。
[3] 连接处于手动提交模式,数据源开始事务。
SQLFreeHandle
C0 没有 Env。 |
C1 未分配 |
C2 已分配 |
C3 需要数据 |
C4 已连接 |
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 已连接 |
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 已连接 |
C5 语句 |
C6 事务 |
---|---|---|---|---|---|---|
IH | IH | --[1] 08003[2] | HY010 | -- | -- | -- |
[1] Attribute 参数SQL_ATTR_ACCESS_MODE、SQL_ATTR_AUTOCOMMIT、SQL_ATTR_LOGIN_TIMEOUT、SQL_ATTR_ODBC_CURSORS、SQL_ATTR_TRACE或SQL_ATTR_TRACEFILE,或者已为连接属性设置了值。
[2] Attribute 参数未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 已连接 |
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 已连接 |
C5 语句 |
C6 事务 |
---|---|---|---|---|---|---|
IH | -- | -- | -- | -- | -- | -- |
SQLGetFunctions
C0 无 Env。 |
C1 未分配 |
C2 已分配 |
C3 需要数据 |
C4 已连接 |
C5 语句 |
C6 事务 |
---|---|---|---|---|---|---|
IH | IH | HY010 | HY010 | -- | -- | -- |
SQLGetInfo
C0 无 Env。 |
C1 未分配 |
C2 已分配 |
C3 需要数据 |
C4 已连接 |
C5 语句 |
C6 事务 |
---|---|---|---|---|---|---|
IH | IH | --[1] 08003[2] | 08003 | -- | -- | -- |
[1] InfoType 参数已SQL_ODBC_VER。
[2] 未SQL_ODBC_VER InfoType 参数。
SQLMoreResults
C0 无 Env。 |
C1 未分配 |
C2 已分配 |
C3 需要数据 |
C4 已连接 |
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 已连接 |
C5 语句 |
C6 事务 |
---|---|---|---|---|---|---|
(IH) | (IH) | (08003) | (08003) | -- | -- | -- |
SQLPrepare
C0 无 Env。 |
C1 未分配 |
C2 已分配 |
C3 需要数据 |
C4 已连接 |
C5 语句 |
C6 事务 |
---|---|---|---|---|---|---|
(IH) | (IH) | (IH) | (IH) | (IH) | --[1] C6[2] | -- |
[1] 连接处于自动提交模式,或者数据源未开始事务。
[2] 连接处于手动提交模式,数据源开始事务。
SQLSetConnectAttr
C0 无 Env。 |
C1 未分配 |
C2 已分配 |
C3 需要数据 |
C4 已连接 |
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] Attribute 参数未SQL_ATTR_TRANSLATE_LIB或SQL_ATTR_TRANSLATE_OPTION。
[2] Attribute 参数SQL_ATTR_TRANSLATE_LIB或SQL_ATTR_TRANSLATE_OPTION。
[3] Attribute 参数未SQL_ATTR_ODBC_CURSORS或SQL_ATTR_PACKET_SIZE。
[4] 属性 参数已SQL_ATTR_ODBC_CURSORS。
[5] 属性 参数已SQL_ATTR_PACKET_SIZE。
[6] 未SQL_ATTR_AUTOCOMMIT Attribute 参数,或者 属性 参数已SQL_ATTR_AUTOCOMMIT并且设置此属性未提交事务。
[7] 属性 参数SQL_ATTR_TXN_ISOLATION。
[8] 属性 参数SQL_ATTR_AUTOCOMMIT,并设置此属性提交事务。
SQLSetEnvAttr
C0 无 Env。 |
C1 未分配 |
C2 已分配 |
C3 需要数据 |
C4 已连接 |
C5 语句 |
C6 事务 |
---|---|---|---|---|---|---|
(IH) | -- | -- | (HY010) | -- | -- | -- |
所有其他 ODBC 函数
C0 没有 Env。 |
C1 未分配 |
C2 已分配 |
C3 需要数据 |
C4 已连接 |
C5 语句 |
C6 事务 |
---|---|---|---|---|---|---|
(IH) | (IH) | (IH) | (IH) | (IH) | -- | -- |
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈