SQLRowCount Function(SQLRowCount 函数)

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

总结
SQLRowCount 返回受 UPDATEINSERTDELETE 语句影响的行数;SQLBulkOperations 中的SQL_ADD、SQL_UPDATE_BY_BOOKMARK或SQL_DELETE_BY_BOOKMARK操作;或 SQLSetPos 中的SQL_UPDATE或SQL_DELETE操作。

语法

  
SQLRETURN SQLRowCount(  
      SQLHSTMT   StatementHandle,  
      SQLLEN *   RowCountPtr);  

参数

StatementHandle
[输入]语句句柄。

RowCountPtr
[输出]指向要在其中返回行计数的缓冲区。 对于 SQLBulkOperations 中的 SQL_ADD、SQL_UPDATE_BY_BOOKMARK 和 SQL_DELETE_BY_BOOKMARK 操作的 UPDATEINSERTDELETE 语句,对于 SQLSetPos 中的SQL_UPDATE或SQL_DELETE操作,*RowCountPtr 中返回的值是受请求影响的行数;如果受影响的行数不可用,则为 -1。

当调用 SQLExecute、SQLExecDirect、SQLBulkOperationsSQLSetPos 或 SQLMoreResults,诊断数据结构的SQL_DIAG_ROW_COUNT字段将设置为行计数,并且行计数以依赖于实现的方式缓存。 SQLRowCount 返回缓存的行计数值。 缓存行计数值有效,直到将语句句柄设置回已准备或分配的状态、重新执行语句或 调用 SQLCloseCursor 。 请注意,如果自设置SQL_DIAG_ROW_COUNT字段以来调用了函数,则 SQLRowCount 返回的值可能与SQL_DIAG_ROW_COUNT字段中的值不同,因为SQL_DIAG_ROW_COUNT字段被任何函数调用重置为 0。

对于其他语句和函数,驱动程序可以定义 *RowCountPtr 中返回的值。 例如,某些数据源可能在提取行之前返回 SELECT 语句或目录函数返回的行数。

注意

许多数据源在提取结果集之前无法返回结果集中的行数;为实现最大互操作性,应用程序不应依赖于此行为。

返回

SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_ERROR 或SQL_INVALID_HANDLE。

诊断

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

SQLSTATE 错误 说明
01000 常规警告 特定于驱动程序的信息性消息。 (函数返回SQL_SUCCESS_WITH_INFO。)
HY000 常规错误 发生错误:没有特定的 SQLSTATE,也没有定义特定于实现的 SQLSTATE。 *MessageText 缓冲区中 SQLGetDiagRec 返回的错误消息描述错误及其原因。
HY001 内存分配错误 驱动程序无法分配支持执行或完成函数所需的内存。
HY010 函数序列错误 (DM) 为与 StatementHandle 关联的连接句柄调用异步执行函数。 调用 SQLRowCount 函数时,此异步函数仍在执行。

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

(DM) 在为 StatementHandle 调用 SQLExecuteSQLExecDirectSQLBulkOperationsSQLSetPos 之前调用了函数

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

(DM) 为 StatementHandle 调用了 SQLExecuteSQLExecDirectSQLBulkOperationsSQLSetPos,并返回了SQL_NEED_DATA。 在为所有数据执行参数或列发送数据之前调用此函数。
HY013 内存管理错误 无法处理函数调用,因为基础内存对象无法访问,可能是因为内存条件低。
HY117 连接因未知事务状态而挂起。 仅允许断开连接和只读函数。 (DM) 有关挂起状态的详细信息,请参阅 SQLEndTran 函数
HYT01 超过连接超时时间 在数据源响应请求之前,连接超时期限已过期。 连接超时期限通过 SQLSetConnectAttr 设置,SQL_ATTR_CONNECTION_TIMEOUT。
IM001 驱动程序不支持此函数 (DM) 与 StatementHandle 关联的驱动程序不支持该函数。

注释

如果对语句句柄上执行的最后一个 SQL 语句不是 UPDATEINSERTDELETE 语句,或者对 SQLBulkOperations 的上一次调用中的 Operation 参数未SQL_ADD、SQL_UPDATE_BY_BOOKMARK或SQL_DELETE_BY_BOOKMARK,或者对 SQLSetPos 的上一次调用中的 Operation 参数未SQL_UPDATE或SQL_DELETE, *RowCountPtr 的值是驱动程序定义的。 有关详细信息,请参阅确定受影响的行数

有关以下内容的信息 请参阅
执行 SQL 语句 SQLExecDirect 函数
执行准备的 SQL 语句 SQLExecute 函数

另请参阅

ODBC API 参考
ODBC 头文件