环境转换

ODBC 环境具有以下三种状态。

状态 说明
E0 未分配的环境
E1 已分配的环境,未分配的连接
E2 分配的环境、已分配的连接

下表显示了每个 ODBC 函数如何影响环境状态。

SQLAllocHandle

E0

未分配
E1

已分配
E2

连接
E1[1] --[4] --[4]
(IH) [2] E2[5]
(HY010) [6]
--[4]
(IH) [3] (IH) --[4]

[1] 此行显示SQL_HANDLE_ENV HandleType 时的转换。

[2] 此行显示SQL_HANDLE_DBC HandleType 时的转换。

[3] 此行显示SQL_HANDLE_STMT或SQL_HANDLE_DESC HandleType 时的转换。

[4] 使用 OutputHandlePtr 调用指向有效句柄的 SQLAllocHandle 将覆盖该句柄。 这可能是应用程序编程错误。

[5] 已在环境中设置了SQL_ATTR_ODBC_VERSION环境属性。

[6] 尚未对环境设置SQL_ATTR_ODBC_VERSION环境属性。

SQLDataSources 和 SQLDrivers

E0

未分配
E1

已分配
E2

连接
(IH) --[1]
(HY010) [2]
--[1]
(HY010) [2]

[1] 已在环境中设置了SQL_ATTR_ODBC_VERSION环境属性。

[2] 尚未在环境中设置SQL_ATTR_ODBC_VERSION环境属性。

SQLEndTran

E0

未分配
E1

已分配
E2

连接
(IH) [1] --[3]
(HY010) [4]
--[3]
(HY010) [4]
(IH) [2] (IH) --

[1] 此行显示SQL_HANDLE_ENV HandleType 时的转换。

[2] 此行显示SQL_HANDLE_DBC HandleType 时的转换。

[3] 已在环境中设置了SQL_ATTR_ODBC_VERSION环境属性。

[4] 尚未在环境中设置SQL_ATTR_ODBC_VERSION环境属性。

SQLFreeHandle

E0

未分配
E1

已分配
E2

连接
(IH) [1] E0 (HY010)
(IH) [2] (IH) --[4]
E1[5]
(IH) [3] (IH) --

[1] 此行显示SQL_HANDLE_ENV HandleType 时的转换。

[2] 此行显示SQL_HANDLE_DBC HandleType 时的转换。

[3] 此行显示SQL_HANDLE_STMT或SQL_HANDLE_DESC HandleType 时的转换。

[4] 还有其他分配的连接句柄。

[5] 在句柄中指定的连接句 是唯一分配的连接句柄。

SQLGetDiagField 和 SQLGetDiagRec

E0

未分配
E1

已分配
E2

连接
(IH) [1] -- --
(IH) [2] (IH) --

[1] 此行显示SQL_HANDLE_ENV HandleType 时的转换。

[2] 此行显示SQL_HANDLE_DBC、SQL_HANDLE_STMT或SQL_HANDLE_DESC HandleType 时的转换。

SQLGetEnvAttr

E0

未分配
E1

已分配
E2

连接
(IH) --[1]
(HY010) [2]
--

[1] 已在环境中设置了SQL_ATTR_ODBC_VERSION环境属性。

[2] 尚未在环境中设置SQL_ATTR_ODBC_VERSION环境属性。

SQLSetEnvAttr

E0

未分配
E1

已分配
E2

连接
(IH) --[1]
(HY010) [2]
(HY011)

[1] 已在环境中设置了SQL_ATTR_ODBC_VERSION环境属性。

[2] Attribute 参数未 SQL_ATTR_ODBC_VERSION,并且尚未在环境中设置SQL_ATTR_ODBC_VERSION环境属性。

所有其他 ODBC 函数

E0

未分配
E1

已分配
E2

连接
(IH) (IH) --