SQLSetScrollOptions 映射

当应用程序通过 ODBC 3.x 驱动程序调用 SQLSetScrollOptions 并且驱动程序不支持 SQLSetScrollOptions 时,对 的调用

SQLSetScrollOptions(StatementHandle, Concurrency, KeysetSize, RowsetSize)  

结果如下:

  • 对 的调用

    SQLGetInfo(ConnectionHandle, InfoType, InfoValuePtr, BufferLength, StringLengthPtr)  
    

    InfoType 参数设置为下表中的值之一,具体取决于 SQLSetScrollOptionsKeysetSize 参数的值。

    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 (行值,不在) 范围内,并且不会执行以下步骤。

    然后,驱动程序管理器根据 SQLSetScrollOptionsConcurrency 参数的值,验证是否在调用 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)  
    

    根据 SQLSetScrollOptionsKeysetSize 参数的值,将 *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 提取多行时使用。