Share via


IRowsetLocateImpl 类

实现 OLE DB IRowsetLocate 接口,该接口从行集中提取任意行。

语法

template <
   class T,
   class RowsetInterface,
   class RowClass = CSimpleRow,
   class MapClass = CAtlMap < RowClass::KeyType, RowClass* >,
   class BookmarkKeyType = LONG,
   class BookmarkType = LONG,
   class BookmarkMapClass = CAtlMap < RowClass::KeyType, RowClass* >>
class ATL_NO_VTABLE IRowsetLocateImpl : public IRowsetImpl<
       T,
       RowsetInterface,
       RowClass,
       MapClass>

参数

T
派生自 IRowsetLocateImpl 的类。

RowsetInterface
派生自 IRowsetImpl 的类。

RowClass
HROW 的存储单元。

MapClass
提供程序持有的所有行句柄的存储单元。

BookmarkKeyType
书签的类型,如 LONG 或字符串。 普通书签的长度必须至少为两个字节。 (为 OLE DB 标准书签DBBMK_FIRSTDBBMK_LASTDBBMK_INVALID 保留单字节长度。)

BookmarkType
用于维护书签到数据关系的映射机制。

BookmarkMapClass
书签持有的所有行句柄的存储单元。

要求

标头: atldb.h

成员

接口方法

名称 描述
比较 比较两个书签。
GetRowsAt 提取行,起始行的位置为书签加上一个偏移量得到的位置。
GetRowsByBookmark 提取与指定书签匹配的行。
哈希 返回指定书签的哈希值。

数据成员

名称 描述
m_rgBookmarks 书签数组。

注解

IRowsetLocateImplIRowsetUpdate 接口的 OLE DB 模板实现。 IRowsetLocate 用于从行集中提取任意行。 不实现此接口的行集是行集 sequential。 行集上存在 IRowsetLocate 时,第 0 列是行的书签;读取此列将获取可用于重新定位到同一行的书签值。

IRowsetLocateImpl 用于在提供程序中实现书签支持。 书签是占位符(行集上的索引),让使用者能够快速返回到行,从而允许高速访问数据。 提供程序确定哪些书签可以唯一标识行。 使用 IRowsetLocateImpl 方法,可以比较书签、按偏移量提取行、按书签提取行,以及返回书签的哈希值。

要在行集中支持 OLE DB 书签,请使行集从此类继承。

有关实现书签支持的信息,请找到平台 SDK 中 OLE DB 程序员参考中的 Visual C++ 程序员指南书签,参阅其中的书签提供程序支持

IRowsetLocateImpl::Compare

比较两个书签。

语法

STDMETHOD (Compare )(HCHAPTER /* hReserved */,
   DBBKMARK cbBookmark1,
   const BYTE* pBookmark1,
   DBBKMARK cbBookmark2,
   const BYTE* pBookmark2,
   DBCOMPARE* pComparison);

参数

请参阅 OLE DB 程序员参考中的 IRowsetLocate::Compare

备注

书签可以是标准 OLE DB 定义的标准书签DBBMK_FIRSTDBBMK_LASTDBBMK_INVALID)。 pComparison 中返回的值指示两个书签之间的关系:

  • DBCOMPARE_LT(cbBookmark1 位于 cbBookmark2 之前。)

  • DBCOMPARE_EQ(cbBookmark1cbBookmark2 并列。)

  • DBCOMPARE_GT(cbBookmark1 位于 cbBookmark2 之后。)

  • DBCOMPARE_NE(书签并列且未排序。)

  • DBCOMPARE_NOTCOMPARABLE(无法比较书签。)

IRowsetLocateImpl::GetRowsAt

提取行,起始行的位置为书签加上一个偏移量得到的位置。

语法

STDMETHOD (GetRowsAt )(HWATCHREGION /* hReserved1 */,
   HCHAPTER hReserved2,
   DBBKMARK cbBookmark,
   const BYTE* pBookmark,
   DBROWOFFSET lRowsOffset,
   DBROWCOUNT cRows,
   DBCOUNTITEM* pcRowsObtained,
   HROW** prghRows);

参数

请参阅 OLE DB 程序员参考中的 IRowsetLocate::GetRowsAt

备注

若要改用游标位置,请使用 IRowset::GetRowsAt

IRowsetLocateImpl::GetRowsAt 不更改游标位置。

IRowsetLocateImpl::GetRowsByBookmark

提取与指定书签匹配的一行或多行。

语法

STDMETHOD (GetRowsByBookmark )(HCHAPTER /* hReserved */,
   DBCOUNTITEM cRows,
   const DBBKMARK rgcbBookmarks[],
   const BYTE* rgpBookmarks,
   HROW rghRows[],
   DBROWSTATUS* rgRowStatus[]);

参数

hReserved
[in] 对应于 IRowsetLocate::GetRowsByBookmarkhChapter 参数。

有关其他参数,请参阅 OLE DB 程序员参考中的 IRowsetLocate::GetRowsByBookmark

注解

书签可以是定义的值,也可以是 OLE DB 标准书签DBBMK_FIRSTDBBMK_LAST)。 不更改游标位置。

IRowsetLocateImpl::Hash

返回指定书签的哈希值。

语法

STDMETHOD (Hash )(HCHAPTER /* hReserved */,
   DBBKMARK cbBookmarks,
   const DBBKMARK* rgcbBookmarks[],
   const BYTE* rgpBookmarks[],
   DBHASHVALUE rgHashValues[],
   DBROWSTATUS rgBookmarkStatus[]);

参数

hReserved
[in] 对应于 IRowsetLocate::HashhChapter 参数。

有关其他参数,请参阅 OLE DB 程序员参考中的 IRowsetLocate::Hash

IRowsetLocateImpl::m_rgBookmarks

书签数组。

语法

CAtlArray<DBROWCOUNT> m_rgBookmarks;

另请参阅

OLE DB 提供程序模板
OLE DB 提供程序模板体系结构
IRowsetLocate:IRowsetProvider Support for Bookmarks
书签