一致性
推出版本:ODBC 3.0 标准合规:ISO 92
总结
SQLCloseCursor 会关闭已打开的语句中的光标并丢弃待处理的结果。
Syntax
SQLRETURN SQLCloseCursor(
SQLHSTMT StatementHandle);
Arguments
StatementHandle
[输入]语句句柄。
Returns
SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_ERROR 或SQL_INVALID_HANDLE。
诊断
当 SQLCloseCursor 返回 SQL_ERROR 或 SQL_SUCCESS_WITH_INFO 时,可以通过调用 SQLGetDiagRec 获得关联的 SQLSTATE 值,Handle 为 SQL_HANDLE_STMT,Handle 为 StatementHandle。 下表列出 了SQLCloseCursor 通常返回的SQLSTATE值,并在该函数的上下文中逐一解释;“(DM)” 符号位于驱动程序管理器返回的 SQLSTATE 描述之前。 除非另有说明,否则与每个 SQLSTATE 值关联的返回代码SQL_ERROR。
| SQLSTATE | Error | Description |
|---|---|---|
| 01000 | 常规警告 | 特定于驱动程序的信息性消息。 (函数返回SQL_SUCCESS_WITH_INFO。) |
| 24000 | 游标状态无效 | StatementHandle 上没有打开任何光标。 (仅由ODBC 3回传。x 驱动。) |
| HY000 | 常规错误 | 发生错误:没有特定的 SQLSTATE,也没有定义特定于实现的 SQLSTATE。 *MessageText 缓冲区中 SQLGetDiagRec 返回的错误消息描述错误及其原因。 |
| HY001 | 内存分配错误 | 驱动程序无法分配支持执行或完成函数所需的内存。 |
| HY010 | 函数序列错误 | (DM) 调用了一个异步执行函数,用于与 StatementHandle 关联的连接句柄,且在调用该函数时仍在执行。 (DM) 为 StatementHandle 调用异步执行函数,并在调用此函数时仍在执行。 (DM) 为 StatementHandle 调用了 SQLExecute、SQLExecDirect、SQLBulkOperations 或 SQLSetPos,并返回了SQL_NEED_DATA。 在为所有数据执行参数或列发送数据之前调用此函数。 |
| HY013 | 内存管理错误 | 无法处理函数调用,因为基础内存对象无法访问,可能是因为内存条件低。 |
| HY117 | 连接因未知事务状态而挂起。 仅允许断开连接和只读函数。 | (DM) 有关挂起状态的详细信息,请参阅 SQLEndTran 函数。 |
| HYT01 | 超过连接超时时间 | 在数据源响应请求之前,连接超时期限已过期。 连接超时期限通过 SQLSetConnectAttr 设置,SQL_ATTR_CONNECTION_TIMEOUT。 |
| IM001 | 驱动程序不支持此函数 | (DM) 与 StatementHandle 关联的驱动程序不支持该函数。 |
Comments
如果没有打开光标,SQLCloseCursor 返回 SQLSTATE 24000(光标状态无效)。 调用 SQLCloseCursor 等同于使用 SQL_CLOSE 选项调用 SQLFreeStmt ,不同的是,如果语句中没有打开光标, SQLFreeStmt SQL_CLOSE 对应用程序没有影响,而 SQLCloseCursor 返回的是 SQLSTATE 24000(光标状态无效)。
注释
如果是ODBC 3。x 应用与ODBC 2合作。x 驱动在未打开光标时调用 SQLCloseCursor,SQLSTATE 24000(无效光标状态)未返回,因为驱动程序管理器将 SQLCloseCursor 映射为 SQLFreeStmt SQL_CLOSE。
更多信息请参见 关闭光标。
代码示例
参见 SQLBrowseConnect 函数 和 SQLConnect 函数。
相关函数
| 有关以下内容的信息 | 请参阅 |
|---|---|
| 取消语句处理 | SQLCancel 函数 |
| 释放手柄 | SQLFreeHandle 函数 |
| 处理多个结果集 | SQLMoreResults 函数 |