驱动程序管理器的用途
下表总结了 ODBC 3.x 驱动程序管理器如何将调用映射到 ODBC 2.x 和 ODBC 3.x 驱动程序。
函数或 statement 属性 |
注释 |
---|---|
SQL_ATTR_FETCH_BOOKMARK_PTR | 指向要与 SQLFetchScroll 一起使用的书签。 以下是实现详细信息: - 当应用程序在 ODBC 2.x 驱动程序中设置此设置时,ODBC 3.x 驱动程序管理器将缓存它。 应用程序稍后调用 SQLFetchScroll 时,它会取消引用指针并将值传递给 SQLExtendedFetch 的 FetchOffset 参数中的 ODBC 2.x 驱动程序。 - 当应用程序在 ODBC 3.x 驱动程序中设置此设置时,ODBC 3.x 驱动程序管理器会将调用传递给驱动程序。 |
SQL_ATTR_ROW_STATUS_PTR | 指向由 SQLFetch、 SQLFetchScroll、 SQLBulkOperations 和 SQLSetPos 填充的行状态数组。 以下是实现详细信息: - 当应用程序在 ODBC 2.x 驱动程序中设置此值时,ODBC 3.x 驱动程序管理器会缓存其值。 调用 SQLFetchScroll 或 SQLFetch 时,它将此值传递给 SQLExtendedFetch 的 RowStatusArray 参数中的 ODBC2.x 驱动程序。 - 当应用程序在 ODBC 3.x 驱动程序中设置此设置时,ODBC 3.x 驱动程序管理器会将调用传递给驱动程序。 - 在状态 S6 中,如果应用程序设置SQL_ATTR_ROW_STATUS_PTR,然后调用操作为 SQL_ADD) 或 SQLSetPos 的 SQLBulkOperations (而不首先调用 SQLFetch 或 SQLFetchScroll,则现在无法设置 SQLSTATE HY011 (属性) 返回。 |
SQL_ATTR_ROWS_FETCHED_PTR | 指向 SQLFetch 和 SQLFetchScroll 在其中返回提取的行数的缓冲区。 以下是实现详细信息: - 当应用程序在 ODBC 2.x 驱动程序中设置此值时,ODBC 3.x 驱动程序管理器会缓存其值。 当应用程序调用 SQLFetch 或 SQLFetchScroll 时,它将此值传递给 SQLExtendedFetch 的 RowCountPtr 参数中的 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 应用程序调用 SQLExtendedFetch 时 SQLExtendedFetch 使用的行集大小。 以下是实现详细信息: - 当应用程序设置此设置时,ODBC 3.x 驱动程序管理器会将调用传递给驱动程序,而不考虑驱动程序版本。 - 当使用 ODBC 2.x 驱动程序的应用程序调用 SQLSetScrollOptions 时,SQL_ROWSET_SIZE设置为 RowsetSize 参数中的 值。 |
SQLBulkOperations | 执行插入操作,或者按书签操作执行更新、删除或提取操作。 以下是实现详细信息: - 当应用程序在 ODBC 2.x 驱动程序中调用操作为 SQL_ADD 的 SQLBulkOperations 时,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_ADD 的 SQLBulkOperations,则 ODBC 3.x 驱动程序管理器将返回错误。 |
SQLExtendedFetch | 返回指定的行集。 除了上述限制外,ODBC 3.x 驱动程序管理器会将对 SQLExtendedFetch 的调用传递给驱动程序,而不考虑驱动程序版本。 |
SQLFetch | 返回下一个行集。 以下是实现详细信息: - 当应用程序在 ODBC 2.x 驱动程序中调用 SQLFetch 时,ODBC 3.x 驱动程序管理器将其映射到 SQLExtendedFetch。 SQLExtendedFetch 的 FetchOrientation 参数设置为 SQL_FETCH_NEXT。 驱动程序管理器将 SQL_ATTR_ROW_STATUS_PTR 语句属性的缓存值用于 RowStatusArray 参数,并将 SQL_ATTR_ROWS_FETCHED_PTR 语句属性的缓存值用于 RowCountPtr 参数。 - ODBC 3.x 应用程序可以在 ODBC 2.x 驱动程序中混合调用 SQLFetch 和 SQLFetchScroll,因为当应用程序在 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 语句属性的缓存值,如果 SQLFetchScroll 的 FetchOffset 参数不为 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 提取多行时使用。 |