使用游标 (ODBC)
使用游标
调用 SQLSetStmtAttr 以设置所需的游标属性:
设置 SQL_ATTR_CURSOR_TYPE 和 SQL_ATTR_CONCURRENCY 属性(这是首选选项)。
或
设置 SQL_CURSOR_SCROLLABLE 和 SQL_CURSOR_SENSITIVITY 属性。
调用 SQLSetStmtAttr 以便通过使用 SQL_ATTR_ROW_ARRAY_SIZE 属性设置行集大小。
或者,如果将通过使用 WHERE CURRENT OF 子句完成定位更新,则调用 SQLSetCursorName 以便设置游标名称。
执行 SQL 语句。
或者,如果将通过使用 WHERE CURRENT OF 子句完成定位更新并且游标名称没有在第 3 步中随 SQLSetCursorName 提供,则调用 SQLGetCursorName 以获取游标名称。
调用 SQLNumResultCols 以获取行集中的列数 (C)。
使用按列绑定。
- 或 -
使用按行绑定。
根据需要从游标提取行集。
调用 SQLMoreResults 以确定其他结果集是否可用。
如果返回 SQL_SUCCESS,则其他结果集可用。
如果返回 SQL_NO_DATA,则没有其他结果集可用。
如果返回 SQL_SUCCESS_WITH_INFO 或 SQL_ERROR,则调用 SQLGetDiagRec 以确定来自 PRINT 或 RAISERROR 语句的输出是否可用。
如果将绑定语句参数用于某一存储过程的输出参数或返回值,则使用在绑定参数缓冲区中当前提供的数据。
在使用绑定参数时,对 SQLExecute 或 SQLExecDirect 的每个调用都将执行 SQL 语句 S 次,其中,S 是绑定参数数组中元素的数目。 这意味着,将存在 S 组要处理的结果,而其中每组结果都由所有结果集、输出参数以及 SQL 语句的单次执行通常返回的返回代码构成。
请注意,在某一结果集包含计算行时,每个计算行都可作为单独的结果集生成。 这些计算结果集混杂在普通行内,并且将普通行分为多个结果集。
或者,使用 SQL_UNBIND 调用 SQLFreeStmt 以释放任何绑定列缓冲区。
如果其他结果集可用,则转到步骤 6。
在步骤 9 中,对部分处理的结果集调用 SQLMoreResults 将清除其余的结果集。 清除部分处理的结果集的另一个方法是调用 SQLCloseCursor。
通过设置 SQL_ATTR_CURSOR_TYPE 和 SQL_ATTR_CONCURRENCY,或通过设置 SQL_ATTR_CURSOR_SENSITIVITY 和 SQL_ATTR_CURSOR_SCROLLABLE,可以控制所使用的游标类型。 不应将指定游标行为的两种方法混用。