移动和提取行集的一般步骤

使用游标处理结果集时,应用程序需要执行下列步骤:

  • 使用SQLSetStmtAttr设置游标的属性,选择适当的游标行为;
  • 调用SQLExecute或SQLExecDirect打开游标;
  • 使用SQLFetch或SQLFetchScroll移动和提取行集。
  • SQLFetch或SQLFetchScroll都可以用于提取行集,通过SQLSetStmtAttr的SQL_ATTR_ROW_ARRAY_SIZE选项可以设置每次读取的行数。
  • SQLFetch只支持从首行到末行的串行移动,适于NON-SCROLLABLE类型的游标。
  • SQLFetchScroll则有完备的游标,通过FetchOrientation参数,可以选择移动到下一行集、前一行集、首行、末行、有行号标志的指定行或是基于当前行的偏移;与书签结合使用,可以实现相对书签标志行的偏移。因此,SQLFetchScroll适于SCROLLABLE类型的游标。

如果用户只需要简单的获取数据,如统计一张表中的值,从而只需要一次性的遍历整张表;应用程序可以选择SQLFetch或者使用SQLFetchScroll的SQL_FETCH_NEXT。

如果用户需要编写基于窗口的应用,应用程序应该选择SQLFetchScroll。 此时,可以调用SQLStmtAttr设置行集的大小为视窗一次显示的函数;使用SQLFetchScroll的移动功能实现视窗的滚动。下表列出了视窗的滚动操作与对应的SQLFetchScroll调用模式。

SQLFetchScroll对应滚动选项 滚动操作
SQL_FETCH_PRIOR 向上滚动一个行集
SQL_FETCH_NEXT 向下滚动一个行集
SQL_FETCH_RELATIVE 相对前行集而言,从FetchOffset指定偏移位置开始返回行集 ,FetchOffset 可以是正数也可以是负数 正数代表向后偏移,负数代表向前偏移
SQL_FETCH_FIRST 获取第一个行集
SQL_FETCH_LAST 获取最后一个行集
SQL_FETCH_ABSOLUTE 返回从结果集起始行偏移FetchOffset 行后开始的行集
SQL_FETCH_BOOKMARK 从由 SQL_ATTR_FETCH_BOOKMARK_PTR 语句属性指定的书签中返回行集 FetchOffset 行。