ODBC 游标库

某些 ODBC 驱动程序仅支持默认游标设置;此外,这些驱动程序也不支持定位游标操作,例如 SQLSetPos。ODBC 游标库是用于对通常不支持块状游标或静态游标的驱动程序实现这些游标的 Microsoft 数据访问组件 (MDAC) 的组件。游标库还针对其创建的游标实现定位 UPDATE 和 DELETE 语句以及 SQLSetPos

ODBC 游标库作为 ODBC 驱动程序管理器和 ODBC 驱动程序之间的层实现。如果加载 ODBC 游标库,ODBC 驱动程序管理器则将与游标相关的所有命令路由到该游标库,而不是驱动程序。游标库通过从基础驱动程序提取整个结果集并将此结果集缓存到客户端来实现游标。当使用 ODBC 游标库时,应用程序仅限于该游标库的游标功能;对基础驱动程序中的其他游标功能的支持不可用于该应用程序。

通常不需要将 ODBC 游标库与 SQL Server Native Client ODBC 驱动程序一起使用,因为与 ODBC 游标库相比,该驱动程序自身支持更多的游标功能。配合使用 ODBC 游标库和 SQL Server Native Client ODBC 驱动程序的唯一原因在于,该驱动程序通过服务器游标实现其游标支持,而服务器游标并不支持所有 SQL 语句。如果需要配合使用静态游标和存储过程、批处理或包含 COMPUTE、COMPUTE BY、FOR BROWSE 或 INTO 的 SQL 语句,请考虑使用 ODBC 游标库。但是,使用游标库时应非常小心,因为它在客户端上缓存整个结果集,这可能占用大量内存并降低性能。

在连接到数据源之前,应用程序使用SQLSetConnectAttr设置 SQL_ATTR_ODBC_CURSORS 连接属性,基于连接逐个调用游标库。SQL_ATTR_ODBC_CURSORS 设置为下列三个值之一:

  • SQL_CUR_USE_ODBC
    当对 SQL Server Native Client ODBC 驱动程序设置此选项时,ODBC 游标库则覆盖 SQL Server Native Client ODBC 驱动程序的本机游标支持。只有该游标库支持的游标类型才能用于连接;不能使用服务器游标。

  • SQL_CUR_USE_DRIVER
    设置此选项之后,SQL Server Native Client ODBC 驱动程序的所有本机游标支持均可用于连接。不能使用 ODBC 游标库。所有游标均作为服务器游标实现。

  • SQL_CUR_USE_IF_NEEDED
    设置此选项之后,其效果与同 SQL Server Native Client ODBC 驱动程序一起使用的 SQL_CUR_USE_DRIVER 相同。连接时,ODBC 驱动程序管理器测试并查看连接的 ODBC 驱动程序是否支持 SQLFetchScroll 的 SQL_FETCH_PRIOR 选项。如果驱动程序不支持此选项,ODBC 驱动程序管理器则加载 ODBC 游标库。如果驱动程序支持此选项,ODBC 驱动程序管理器则不加载 ODBC 游标库,应用程序将使用该驱动程序的本机支持。由于 SQL Server Native Client ODBC 驱动程序支持 SQL_FETCH_PRIOR,因此 ODBC 驱动程序管理器不加载 ODBC 游标库。

游标库允许应用程序对一个连接使用多个活动语句,以及可滚动、可更新的游标。必须加载游标库以支持该功能。使用 SQLSetConnectAttr 可以指定应如何使用游标库,使用 SQLSetStmtAttr 可以指定游标类型、并发和行集大小。