SQLSetScrollOptions 映射
当应用程序通过 ODBC 3.x 驱动程序调用 SQLSetScrollOptions 并且驱动程序不支持 SQLSetScrollOptions 时,对 的调用
SQLSetScrollOptions(StatementHandle, Concurrency, KeysetSize, RowsetSize)
结果如下:
对 的调用
SQLGetInfo(ConnectionHandle, InfoType, InfoValuePtr, BufferLength, StringLengthPtr)
将 InfoType 参数设置为下表中的值之一,具体取决于 SQLSetScrollOptions 中 KeysetSize 参数的值。
KeysetSize 参数 InfoType 参数 SQL_SCROLL_FORWARD_ONLY SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2 SQL_SCROLL_STATIC SQL_STATIC_CURSOR_ATTRIBUTES2 SQL_SCROLL_KEYSET_DRIVEN SQL_KEYSET_CURSOR_ATTRIBUTES2 SQL_SCROLL_DYNAMIC SQL_DYNAMIC_CURSOR_ATTRIBUTES2 大于 RowsetSize 参数的值 SQL_KEYSET_CURSOR_ATTRIBUTES2 如果上表中未列出 KeysetSize 参数的值,则对 SQLSetScrollOptions 的 调用将返回 SQLSTATE S1107 (行值,不在) 范围内,并且不会执行以下步骤。
然后,驱动程序管理器根据 SQLSetScrollOptions 中 Concurrency 参数的值,验证是否在调用 SQLGetInfo 返回的 InfoValuePtr 值中设置了适当的位。
并发 参数 InfoType 设置 SQL_CONCUR_READ_ONLY SQL_CA2_READ_ONLY_CONCURRENCY SQL_CONCUR_LOCK SQL_CA2_LOCK_CONCURRENCY SQL_CONCUR_ROWVER SQL_CA2_ROWVER_CONCURRENCY SQL_CONCUR_VALUES SQL_CA2_VALUES_CONCURRENCY 如果 Concurrency 参数不是上表中的值之一,则对 SQLSetScrollOptions 的 调用将返回 SQLSTATE S1108 (并发选项范围外) 且不执行任何以下步骤。 如果在 *InfoValuePtr 中未将上表) 中指示的适当位 (设置为与 Concurrency 参数对应的值之一,则对 SQLSetScrollOptions 的 调用将返回 SQLSTATE S1C00 (Driver 不支持) ,并且不会执行以下步骤。
对 的调用
SQLSetStmtAttr(StatementHandle, SQL_ATTR_CURSOR_TYPE, ValuePtr, 0)
根据 SQLSetScrollOptions 中 KeysetSize 参数的值,将 *ValuePtr 设置为下表中的值之一。
KeysetSize 参数 *ValuePtr SQL_SCROLL_FORWARD_ONLY SQL_CURSOR_FORWARD_ONLY SQL_SCROLL_STATIC SQL_CURSOR_STATIC SQL_SCROLL_KEYSET_DRIVEN SQL_CURSOR_KEYSET_DRIVEN SQL_SCROLL_DYNAMIC SQL_CURSOR_DYNAMIC 大于 RowsetSize 参数的值 SQL_CURSOR_KEYSET_DRIVEN 对 的调用
SQLSetStmtAttr(StatementHandle, SQL_ATTR_CONCURRENCY, ValuePtr, 0)
将 *ValuePtr 设置为 SQLSetScrollOptions 中的 Concurrency 参数。
如果对 SQLSetScrollOptions 的调用中的 KeysetSize 参数为正数,则调用
SQLSetStmtAttr(StatementHandle, SQL_ATTR_KEYSET_SIZE, ValuePtr, 0)
将 *ValuePtr 设置为 SQLSetScrollOptions 中的 KeysetSize 参数。
对 的调用
SQLSetStmtAttr(StatementHandle, SQL_ROWSET_SIZE, ValuePtr, 0)
将 *ValuePtr 设置为 SQLSetScrollOptions 中的 RowsetSize 参数。
注意
当驱动程序管理器为使用不支持 SQLSetScrollOptions 的 ODBC 3.x 驱动程序的应用程序映射 SQLSetScrollOptions 时,驱动程序管理器会将 SQL_ROWSET_SIZE 语句选项(而不是 SQL_ATTR_ROW_ARRAY_SIZE 语句属性)设置为 SQLSetScrollOption 中的 RowsetSize 参数。 因此,通过调用 SQLFetch 或 SQLFetchScroll 提取多行时,应用程序无法使用 SQLSetScrollOptions。 它只能在通过调用 SQLExtendedFetch 提取多行时使用。