驱动程序管理器的用途

下表总结了 ODBC 3.x 驱动程序管理器如何将调用映射到 ODBC 2.x 和 ODBC 3.x 驱动程序。

函数或

statement 属性
注释
SQL_ATTR_FETCH_BOOKMARK_PTR 指向要与 SQLFetchScroll 一起使用的书签。 以下是实现详细信息:

- 当应用程序在 ODBC 2.x 驱动程序中设置此设置时,ODBC 3.x 驱动程序管理器将缓存它。 应用程序稍后调用 SQLFetchScroll 时,它会取消引用指针并将值传递给 SQLExtendedFetchFetchOffset 参数中的 ODBC 2.x 驱动程序。
- 当应用程序在 ODBC 3.x 驱动程序中设置此设置时,ODBC 3.x 驱动程序管理器会将调用传递给驱动程序。
SQL_ATTR_ROW_STATUS_PTR 指向由 SQLFetchSQLFetchScrollSQLBulkOperationsSQLSetPos 填充的行状态数组。 以下是实现详细信息:

- 当应用程序在 ODBC 2.x 驱动程序中设置此值时,ODBC 3.x 驱动程序管理器会缓存其值。 调用 SQLFetchScroll 或 SQLFetch 时,它将此值传递给 SQLExtendedFetchRowStatusArray 参数中的 ODBC2.x 驱动程序。
- 当应用程序在 ODBC 3.x 驱动程序中设置此设置时,ODBC 3.x 驱动程序管理器会将调用传递给驱动程序。
- 在状态 S6 中,如果应用程序设置SQL_ATTR_ROW_STATUS_PTR,然后调用操作为 SQL_ADD) 或 SQLSetPosSQLBulkOperations (而不首先调用 SQLFetchSQLFetchScroll,则现在无法设置 SQLSTATE HY011 (属性) 返回。
SQL_ATTR_ROWS_FETCHED_PTR 指向 SQLFetchSQLFetchScroll 在其中返回提取的行数的缓冲区。 以下是实现详细信息:

- 当应用程序在 ODBC 2.x 驱动程序中设置此值时,ODBC 3.x 驱动程序管理器会缓存其值。 当应用程序调用 SQLFetch 或 SQLFetchScroll 时,它将此值传递给 SQLExtendedFetchRowCountPtr 参数中的 ODBC 2.x 驱动程序。
- 当应用程序在 ODBC 3.x 驱动程序中设置此设置时,ODBC 3.x 驱动程序管理器会将调用传递给驱动程序。
SQL_ATTR_ROW_ARRAY_SIZE 设置行集大小。 以下是实现详细信息:

- 当应用程序在 ODBC 2.x 驱动程序中设置此项时,ODBC 3.x 驱动程序管理器会将其映射到 SQL_ROWSET_SIZE 语句属性。
- 当应用程序在 ODBC 3.x 驱动程序中设置此设置时,ODBC 3.x 驱动程序管理器会将调用传递给驱动程序。
- 当使用 ODBC 3.x 驱动程序的应用程序调用 SQLSetScrollOptions 时,如果基础驱动程序不支持 SQLSetScrollOptions,则将SQL_ROWSET_SIZE设置为 RowsetSize 参数中的 值。
SQL_ROWSET_SIZE 设置 ODBC 2.x 应用程序调用 SQLExtendedFetchSQLExtendedFetch 使用的行集大小。 以下是实现详细信息:

- 当应用程序设置此设置时,ODBC 3.x 驱动程序管理器会将调用传递给驱动程序,而不考虑驱动程序版本。
- 当使用 ODBC 2.x 驱动程序的应用程序调用 SQLSetScrollOptions 时,SQL_ROWSET_SIZE设置为 RowsetSize 参数中的 值。
SQLBulkOperations 执行插入操作,或者按书签操作执行更新、删除或提取操作。 以下是实现详细信息:

- 当应用程序在 ODBC 2.x 驱动程序中调用操作为 SQL_ADDSQLBulkOperations 时,ODBC 3.x 驱动程序管理器会将其映射到 SQLSetPos操作为 SQL_ADD。
- 使用不支持 SQLSetPos操作为 SQL_ADD 的 ODBC 2.x 驱动程序时,ODBC 3.x 驱动程序管理器不会将操作为 SQL_ADD 的 SQLSetPos 映射到具有 SQL_ADD 操作SQLBulkOperations。 这是因为不能在 S7 状态中调用 SQLBulkOperations ,而在 ODBC 2.x 中,SQLBulkOperations 是唯一可以调用 SQLSetPos 的状态。
- 如果在调用 SQLFetchScroll 之前,应用程序在 ODBC 2.x 驱动程序中调用操作为 SQL_ADDSQLBulkOperations,则 ODBC 3.x 驱动程序管理器将返回错误。
SQLExtendedFetch 返回指定的行集。 除了上述限制外,ODBC 3.x 驱动程序管理器会将对 SQLExtendedFetch 的调用传递给驱动程序,而不考虑驱动程序版本。
SQLFetch 返回下一个行集。 以下是实现详细信息:

- 当应用程序在 ODBC 2.x 驱动程序中调用 SQLFetch 时,ODBC 3.x 驱动程序管理器将其映射到 SQLExtendedFetchSQLExtendedFetchFetchOrientation 参数设置为 SQL_FETCH_NEXT。 驱动程序管理器将 SQL_ATTR_ROW_STATUS_PTR 语句属性的缓存值用于 RowStatusArray 参数,并将 SQL_ATTR_ROWS_FETCHED_PTR 语句属性的缓存值用于 RowCountPtr 参数。
- ODBC 3.x 应用程序可以在 ODBC 2.x 驱动程序中混合调用 SQLFetchSQLFetchScroll,因为当应用程序在 ODBC 2.x 驱动程序中调用 SQLFetch 时,ODBC 3.x 驱动程序管理器会将 SQLFetch 映射到 SQLExtendedFetch
- 如果 ODBC 2.x 驱动程序不支持 SQLExtendedFetch,则当应用程序在该驱动程序中调用 SQLFetch 时,ODBC 3.x 驱动程序管理器不会将 SQLFetch 或 SQLFetchScroll 映射到 SQLExtendedFetch。 如果应用程序尝试将SQL_ATTR_ROW_ARRAY_SIZE设置为大于 1 的值,则会返回 SQLSTATE HYC00 () 未实现的可选功能。
- 除了刚才指出的限制外,ODBC 3.x 驱动程序管理器会将对 SQLFetch 的调用传递给驱动程序,而不考虑驱动程序版本。
SQLFetchScroll 返回指定的行集。 以下是实现详细信息:

- 当应用程序在 ODBC 2.x 驱动程序中调用 SQLFetchScroll 时,ODBC 3.x 驱动程序管理器会将其映射到 SQLExtendedFetch。 它将 SQL_ATTR_ROW_STATUS_PTR 语句属性的缓存值用于 RowStatusArray 参数,并将 SQL_ATTR_ROWS_FETCHED_PTR 语句属性的缓存值用于 RowCountPtr 参数。 如果 SQLFetchScroll 中的 FetchOrientation 参数SQL_FETCH_BOOKMARK,它将使用 fetchOffset 参数的 SQL_ATTR_FETCH_BOOKMARK_PTR 语句属性的缓存值,如果 SQLFetchScrollFetchOffset 参数不为 0,则返回错误。
- 当应用程序在 ODBC 3.x 驱动程序中调用它时,ODBC 3.x 驱动程序管理器会将调用传递给驱动程序。
SQLSetPos 执行各种定位操作。 ODBC 3.x 驱动程序管理器将调用 SQLSetPos 传递给驱动程序,而不考虑驱动程序版本。
SQLSetScrollOptions 当驱动程序管理器为使用不支持 SQLSetScrollOptions 的 ODBC 3.x 驱动程序的应用程序映射 SQLSetScrollOptions 时,驱动程序管理器会将 SQL_ROWSET_SIZE 语句选项(而不是 SQL_ATTR_ROW_ARRAY_SIZE 语句属性)设置为 SQLSetScrollOption 中的 RowsetSize 参数。 因此,通过调用 SQLFetch 或 SQLFetchScroll 提取多行时,应用程序无法使用 SQLSetScrollOptions 它只能在通过调用 SQLExtendedFetch 提取多行时使用。