SQLNumResultCols 函数

一致性
引入的版本:ODBC 1.0 标准符合性:ISO 92

总结
SQLNumResultCols 返回结果集中的列数。

语法

  
SQLRETURN SQLNumResultCols(  
     SQLHSTMT        StatementHandle,  
     SQLSMALLINT *   ColumnCountPtr);  

参数

StatementHandle
[输入]语句句柄。

ColumnCountPtr
[输出]指向要返回结果集中列数的缓冲区的指针。 此计数不包括绑定书签列。

返回

SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_STILL_EXECUTING、SQL_ERROR或SQL_INVALID_HANDLE。

诊断

SQLNumResultCols 返回SQL_ERROR或SQL_SUCCESS_WITH_INFO时,可以通过使用 handleType of SQL_HANDLE_STMT 和 StatementHandle 句柄调用 SQLGetDiagRec 来获取关联的 SQLSTATE 值。 下表列出了 SQLNumResultCols 通常返回的 SQLSTATE 值,并解释此函数上下文中的每个值;表示法“(DM)”位于驱动程序管理器返回的 SQLSTATE 说明之前。 除非另有说明,否则与每个 SQLSTATE 值关联的返回代码SQL_ERROR。

SQLSTATE 错误 说明
01000 常规警告 特定于驱动程序的信息性消息。 (函数返回SQL_SUCCESS_WITH_INFO。)
08S01 通信链接失败 驱动程序与驱动程序连接到的数据源之间的通信链接在函数完成处理之前失败。
HY000 常规错误 发生错误:没有特定的 SQLSTATE,也没有定义特定于实现的 SQLSTATE。 *MessageText 缓冲区中 SQLGetDiagRec 返回的错误消息描述错误及其原因。
HY001 内存分配错误 驱动程序无法分配支持执行或完成函数所需的内存。
HY008 操作已取消 StatementHandle 启用了异步处理。 调用了该函数,在完成执行之前,对 StatementHandle 调用了 SQLCancel 或 SQLCancelHandle;然后对 StatementHandle 再次调用该函数。

调用了函数,在完成执行之前,SQLCancel 或 SQLCancelHandle 从多线程应用程序中的不同线程调用 StatementHandle
HY010 函数序列错误 (DM) 为与 StatementHandle 关联的连接句柄调用异步执行函数。 调用 SQLNumResultsCols 函数时,此异步函数仍在执行。

(DM) 为 StatementHandle 调用了 SQLExecuteSQLExecDirectSQLMoreResults,并返回了SQL_PARAM_DATA_AVAILABLE。 在检索所有流式处理参数的数据之前调用此函数。

(DM) 在为 StatementHandle 调用 SQLPrepareSQLExecDirect 之前调用了该函数。

(DM) 为 StatementHandle 调用异步执行函数(而不是此函数),并在调用此函数时仍在执行。

(DM) 为 StatementHandle 调用了 SQLExecuteSQLExecDirectSQLBulkOperationsSQLSetPos,并返回了SQL_NEED_DATA。 在为所有数据执行参数或列发送数据之前调用此函数。

有关何时可以释放语句句柄的详细信息,请参阅 SQLPrepare 函数
HY013 内存管理错误 无法处理函数调用,因为基础内存对象无法访问,可能是因为内存条件低。
HY117 连接因未知事务状态而挂起。 仅允许断开连接和只读函数。 (DM) 有关挂起状态的详细信息,请参阅 SQLEndTran 函数
HYT01 超过连接超时时间 在数据源响应请求之前,连接超时期限已过期。 连接超时期限通过 SQLSetConnectAttr 设置,SQL_ATTR_CONNECTION_TIMEOUT。
IM001 驱动程序不支持此函数 (DM) 与 StatementHandle 关联的驱动程序不支持该函数。
IM017 在异步通知模式下禁用轮询 每当使用通知模型时,轮询将被禁用。
IM018 尚未调用 SQLCompleteAsync 来完成此句柄上的上一个异步操作。 如果句柄上的上一个函数调用返回SQL_STILL_EXECUTING并且启用通知模式, 则必须在句柄上调用 SQLCompleteAsync 才能执行后期处理并完成操作。

SQLNumResultCols 可以返回 SQLPrepare 或 SQLExecute 在 SQLPrepare 之后和 SQLExecute 调用可以返回的任何 SQLSTATE,具体取决于数据源何时评估与该语句关联的 SQL 语句。

注释

仅当语句处于准备、执行或定位状态时,才能成功调用 SQLNumResultCols

如果与 StatementHandle 关联的语句未返回列, SQLNumResultCols 会将 *ColumnCountPtr 设置为 0。

SQLNumResultCols 返回的列数与 IRD 的SQL_DESC_COUNT字段的值相同。

有关详细信息,请参阅是否创建了结果集?以及如何使用元数据?

有关以下内容的信息 请参阅
将缓冲区绑定到结果集中的列 SQLBindCol 函数
取消语句处理 SQLCancel 函数
返回有关结果集中的列的信息 SQLColAttribute 函数
返回有关结果集中的列的信息 SQLDescribeCol 函数
执行 SQL 语句 SQLExecDirect 函数
执行准备的 SQL 语句 SQLExecute 函数
提取数据块或滚动结果集 SQLFetchScroll 函数
提取单行或仅向前方向的数据块 SQLFetch 函数
提取部分或全部数据列 SQLGetData 函数
准备 SQL 语句以供执行 SQLPrepare 函数
设置光标滚动选项 SQLSetStmtAttr 函数

另请参阅

ODBC API 参考
ODBC 头文件