SQLFreeHandle - 释放句柄资源

用途


规范: DB2 CLI 5.0 ODBC 3.0 ISO CLI

SQLFreeHandle() 释放与特定环境、连接或语句句柄相关联的资源。

此函数是用于释放资源的类属函数。它替换 SQLFreeConnect(用于释放连接句柄)和 SQLFreeEnv()(用于释放环境句柄)。 SQLFreeHandle() 还替换用于释放语句句柄的 SQLFreeStmt()(指定 SQL_DROP 选项)。

语法

SQLRETURN   SQLFreeHandle    (SQLSMALLINT       HandleType,
                              SQLHANDLE         Handle);

函数自变量

表 60. SQLFreeHandle 自变量

数据类型 自变量 使用 描述
SQLSMALLINT HandleType 输入 SQLFreeHandle() 要释放的句柄的类型。必须是下列其中一值:

SQL_HANDLE_ENV

SQL_HANDLE_DBC

SQL_HANDLE_STMT

如果 HandleType 不是上述值之一,则 SQLFreeHandle() 返回 SQL_INVALID_HANDLE。
SQLHANDLE Handle 输入 要释放的句柄的名称。

用法

SQLFreeHandle() 用来释放环境、连接和语句的句柄。

在释放句柄之后,应用程序不应再使用该句柄;DB2 CLI 不检查函数调用中句柄的有效性。

释放环境句柄

在调用 SQLFreeHandle()HandleType 为 SQL_HANDLE_ENV)之前,应用程序必须对环境中分配的所有连接调用 SQLFreeHandle()HandleType 为 SQL_HANDLE_DBC)。否则,对 SQLFreeHandle() 的调用返回 SQL_ERROR,且环境和任何活动连接仍有效。

释放连接句柄

在调用 SQLFreeHandle()HandleType 为 SQL_HANDLE_DBC)之前,应用程序必须对连接调用 SQLDisconnect()。否则,对 SQLFreeHandle() 的调用返回 SQL_ERROR,且连接仍有效。

释放语句句柄

SQLFreeHandle() 的调用(HandleType 为 SQL_HANDLE_STMT) 释放 SQLAllocHandle() 调用(HandleType 为 SQL_HANDLE_STMT)分配的所有资源。当应用程序调用 SQLFreeHandle() 来释放带有暂挂结果的语句时,暂挂的结果被删除。调用 SQLFreeHandle() 时,如果有暂挂的结果,则结果集被废弃。

SQLDisconnect() 自动删除在该连接上打开的所有语句。

返回码

如果 SQLFreeHandle() 返回 SQL_ERROR,则句柄仍有效。

诊断

表 61. SQLFreeHandle SQLSTATE

SQLSTATE 描述 解释
01000 警告。 参考消息。(函数返回 SQL_SUCCESS_WITH_INFO。)
08S01 通信链路故障。 HandleType 自变量是 SQL_HANDLE_DBC,在函数完成处理之前,DB2 CLI 与它尝试连接的数据源之间的通信链路失效。
HY000 一般错误。 出错,该错误没有特定的 SQLSTATE。*MessageText 缓冲区中由 SQLGetDiagRec() 返回的错误消息描述该错误及其原因。
HY001 内存分配失败。 DB2 CLI 无法分配支持函数的执行或完成所需的内存。
HY010 函数顺序错误。 HandleType 自变量为 SQL_HANDLE_ENV 且至少有一个连接处于已分配或已连接状态。在调用 HandleType 为 SQL_HANDLE_ENV 的 SQLFreeHandle() 之前,必须对每个连接调用 HandleType 为 SQL_HANDLE_DBC 的 SQLDisconnect()SQLFreeHandle()HandleType 自变量是 SQL_HANDLE_DBC,而在对连接调用 SQLDisconnect() 之前调用了该函数。

HandleType 自变量是 SQL_HANDLE_STMT;使用语句句柄调用了 SQLExecute()SQLExecDirect(),且返回了 SQL_NEED_DATA。(DM)在调用 SQLFreeHandle() 之前,未释放任何附属句柄和其它资源。

HY013 发生意外的内存处理错误。 HandleType 自变量是 SQL_HANDLE_STMT;因为未能访问底层内存对象(可能是因为内存不足),所以未能处理函数调用。
HY017 自动分配的描述符句柄的使用无效。 Handle 自变量设置为自动分配的描述符或实现描述符的句柄。

限制

无。

相关参考