使用游标 (ODBC)

使用游标

  1. 调用 SQLSetStmtAttr 以设置所需的游标属性:

    设置SQL_ATTR_CURSOR_TYPE和SQL_ATTR_CONCURRENCY属性(这是首选选项)。

    设置SQL_CURSOR_SCROLLABLE和SQL_CURSOR_SENSITIVITY属性。

  2. 调用 SQLSetStmtAttr 以使用 SQL_ATTR_ROW_ARRAY_SIZE 属性设置行集大小。

  3. (可选)使用 WHERE CURRENT OF 子句调用 SQLSetCursorName 以设置游标名称(如果定位更新完成)。

  4. 执行 SQL 语句。

  5. (可选)调用 SQLGetCursorName 以获取游标名称(如果使用 WHERE CURRENT OF 子句来完成定位更新),并且未在步骤 3 中使用 SQLSetCursorName 提供游标名称。

  6. 调用 SQLNumResultCols 以获取行集中的列数(C)。

    使用列式绑定。

    - 或 -

    使用行式绑定。

  7. 根据需要从游标中提取行集。

  8. 调用 SQLMoreResults 以确定另一个结果集是否可用。

    • 如果返回SQL_SUCCESS,则另一个结果集可用。

    • 如果返回SQL_NO_DATA,则不再提供任何结果集。

    • 如果它返回SQL_SUCCESS_WITH_INFO或SQL_ERROR,请调用 SQLGetDiagRec 来确定 PRINT 或 RAISERROR 语句的输出是否可用。

    如果绑定语句参数用于输出参数或存储过程的返回值,请使用绑定参数缓冲区中现在可用的数据。

    使用绑定参数时,每次调用 SQLExecuteSQLExecDirect 都会执行 SQL 语句 S 次,其中 S 是绑定参数数组中的元素数。 这意味着将有一组要处理的结果,其中每个结果集都包含所有结果集、输出参数和通常由单个 SQL 语句执行返回的返回代码。

    请注意,当结果集包含计算行时,每个计算行都可用作单独的结果集。 这些计算结果集在普通行中交错,并将普通行分解为多个结果集。

  9. (可选)使用SQL_UNBIND调用 SQLFreeStmt 以释放任何绑定列缓冲区。

  10. 如果另一个结果集可用,请转到步骤 6。

    在步骤 9 中,对部分处理的结果集调用 SQLMoreResults 会清除结果集的其余部分。 清除部分处理的结果集的另一种方法是调用 SQLCloseCursor

    可以通过设置SQL_ATTR_CURSOR_TYPE和SQL_ATTR_CONCURRENCY或设置SQL_ATTR_CURSOR_SENSITIVITY和SQL_ATTR_CURSOR_SCROLLABLE来控制使用的游标类型。 不应混合指定游标行为的两种方法。

另请参阅

使用游标作指南主题 (ODBC)