书签类型

ODBC 3.x 中的所有书签都是可变长度书签。 这允许将主键或与表关联的唯一索引用作书签。 书签也可以是 32 位值,就像在 ODBC 2.x 中使用的书签一样。 为了指定书签与游标配合使用,ODBC 3.x 应用程序会将 SQL_ATTR_USE_BOOKMARK 语句属性设置为 SQL_UB_VARIABLE。 自动使用可变长度书签。

应用程序可以调用将 FieldIdentifier 参数设置为 SQL_DESC_OCTET_LENGTH 的 SQLColAttribute,以获取书签的长度。 由于可变长度书签可以是长值,因此应用程序不应绑定到第 0 列,除非该应用程序将对行集中的多行使用书签。

为了实现后向兼容性,因此仅支持固定长度书签。 如果使用 ODBC 3.x 驱动程序的 ODBC 2.x 应用程序调用 SQLSetStmtOption 以将 SQL_USE_BOOKMARKS 设置为 SQL_UB_ON,则会在驱动程序管理器中将其映射到 SQL_UB_VARIABLE。 使用可变长度书签,即使只填充其 32 位也不例外。 如果驱动程序支持固定长度书签,也将支持可变长度书签。 如果使用 ODBC 2.x 驱动程序的 ODBC 3.x 应用程序调用 SQLSetStmtAttr 以将 SQL_ATTR_USE_BOOKMARKS 设置为 SQL_UB_VARIABLE,则会在驱动程序管理器中将其映射到 SQL_UB_ON 并使用 32 位固定长度书签。 然后,SQL_ATTR_FETCH_BOOKMARK_PTR 语句属性必须指向 32 位书签。 如果使用的书签长度超过 32 位,例如将主键用作书签时,游标必须将实际值映射到 32 位值。 例如,可以生成这些值的哈希表。 当使用 ODBC 2.x 驱动程序的 ODBC 3.x 应用程序绑定书签时,缓冲区长度必须为 4。