驱动程序的用途

下表总结了 ODBC 3.x 驱动程序应为块游标和可滚动游标实现的函数和语句属性。

函数或

statement 属性
注释
SQL_ATTR_ROW_STATUS_PTR 设置由 SQLFetch 和 SQLFetchScroll 填充的行状态数组的地址。 如果在语句状态 S6 中调用 SQLSetPos,则 SQLSetPos 也会填充此数组。 如果在 S7 状态中调用 SQLSetPos,则不会填充此数组,但填充 SQLExtendedFetchRowStatusArray 参数指向的数组。 有关详细信息,请参阅附录 B:ODBC 状态转换表中的 语句 转换。
SQL_ATTR_ROWS_FETCHED_PTR 设置 SQLFetchSQLFetchScroll 在其中返回提取的行数的缓冲区的地址。 如果调用 SQLExtendedFetch ,则不会填充此缓冲区,但 RowCountPtr 参数指向提取的行数。
SQL_ATTR_ROW_ARRAY_SIZE 设置 SQLFetchSQLFetchScroll 使用的行集大小。
SQL_ROWSET_SIZE 设置 SQLExtendedFetch 使用的行集大小。 如果 ODBC 3.x 驱动程序想要与调用 SQLExtendedFetchSQLSetPos 的 ODBC 2.x 应用程序一起使用,则可实现此目标。
SQLBulkOperations 如果 ODBC 3.x 驱动程序应与使用 SQLSetPos操作为 SQL_ADD 的 ODBC 2.x 应用程序一起使用,则驱动程序必须支持操作为 SQL_ADDSQLSetPos,以及具有 SQL_ADD 操作SQLBulkOperations
SQLExtendedFetch 返回指定的行集。 如果 ODBC 3.x 驱动程序想要与调用 SQLExtendedFetchSQLSetPos 的 ODBC 2.x 应用程序一起使用,则可实现此目标。 以下是实现详细信息:

- 驱动程序从 SQL_ROWSET_SIZE 语句属性的值中检索行集大小。
- 驱动程序从 RowStatusArray 参数而不是 SQL_ATTR_ROW_STATUS_PTR 语句属性检索行状态数组的地址。 调用 SQLExtendedFetch 中的 RowStatusArray 参数不得为空指针。 (请注意,在 ODBC 3.x 中,SQL_ATTR_ROW_STATUS_PTR 语句属性可以是 null pointer。)
- 驱动程序检索从 RowCountPtr 参数提取的缓冲区的行的地址,而不是 SQL_ATTR_ROWS_FETCHED_PTR 语句属性。
- 驱动程序在行) 返回 SQLSTATE 01S01 (错误,指示调用 SQLExtendedFetch 提取行时出错。 ODBC 3.x 驱动程序应仅在调用 SQLExtendedFetch 时返回 SQLSTATE 01S01 (错误行) ,而不是在调用 SQLFetchSQLFetchScroll 时返回错误。 为了保持向后兼容性,当 SQLSTATE 01S01 (SQLExtendedFetch 返回行) 错误时,驱动程序管理器不会根据 SQLGetDiagField 的“状态记录序列”部分中所述的规则对错误队列中的状态记录进行排序。
SQLFetch 返回下一个行集。 以下是实现详细信息:

- 驱动程序从 SQL_ATTR_ROW_ARRAY_SIZE 语句属性的值中检索行集大小。
- 驱动程序从 SQL_ATTR_ROW_STATUS_PTR 语句属性检索行状态数组的地址。
- 驱动程序从 SQL_ATTR_ROWS_FETCHED_PTR 语句属性检索提取缓冲区的行的地址。
- 应用程序可以在 SQLFetchScrollSQLFetch 之间混合调用。
- 如果绑定了列 0,SQLFetch 将返回书签。
- 可以调用 SQLFetch 以返回多行。
- 驱动程序不会在行) 返回 SQLSTATE 01S01 (错误,指示调用 SQLFetch 提取行时出错。
SQLFetchScroll 返回指定的行集。 以下是实现详细信息:

- 驱动程序从 SQL_ATTR_ROW_ARRAY_SIZE 语句属性中检索行集大小。
- 驱动程序从 SQL_ATTR_ROW_STATUS_PTR 语句属性检索行状态数组的地址。
- 驱动程序从 SQL_ATTR_ROWS_FETCHED_PTR 语句属性检索提取缓冲区的行的地址。
- 应用程序可以在 SQLFetchScrollSQLFetch 之间混合调用。
- 驱动程序不会在行) 返回 SQLSTATE 01S01 (错误,指示调用 SQLFetchScroll 提取行时出错。
SQLSetPos 执行各种定位操作。 以下是实现详细信息:

- 这可以在 语句状态 S6 或 S7 中调用。 有关详细信息,请参阅附录 B:ODBC 状态 转换表中的语句 转换。
- 如果在语句状态 S5 或 S6 中调用,驱动程序将从 SQL_ATTR_ROWS_FETCHED_PTR 语句属性中检索行集大小,并从 SQL_ATTR_ROW_STATUS_PTR 语句属性中检索行状态数组的地址。
- 如果在语句状态 S7 中调用,驱动程序将从 SQL_ROWSET_SIZE 语句属性中检索行集大小,并从 SQLExtendedFetchRowStatusArray 参数中检索行状态数组的地址。
- 驱动程序在行) 返回 SQLSTATE 01S01 (错误,仅指示调用 SQLSetPos 提取行时出错,以在状态 S7 中调用函数时执行批量操作。 为了保持向后兼容性,如果 SQLSetPos 返回了 SQLSTATE 01S01 (行) 错误,驱动程序管理器不会根据 SQLGetDiagField 的“状态记录序列”部分中所述的规则对错误队列中的状态记录进行排序。
- 如果驱动程序应与调用 SQLSetPosOperation 参数为 SQL_ADD 的 ODBC 2.x 应用程序一起使用,则驱动程序必须支持操作参数为 SQL_ADD 的 SQLSetPos