IRowsetUpdateImpl 类

IRowsetUpdate 接口的 OLE DB 模板实现。

语法

template <
   class T,
   class Storage,
   class UpdateArray = CAtlArray<Storage>,
   class RowClass = CSimpleRow,
   class MapClass = CAtlMap <RowClass::KeyType, RowClass*>
>

class IRowsetUpdateImpl : public IRowsetChangeImpl<
   T,
   Storage,
   IRowsetUpdate,
   RowClass,
   MapClass>

参数

T
派生自 IRowsetUpdateImpl 的类。

存储
用户记录。

UpdateArray
包含用于更新行集的缓存数据的数组。

RowClass
HROW 的存储单元。

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

要求

标头: atldb.h

成员

接口方法(与 IRowsetChange 一起使用)

名称 描述
SetData 设置一列或多列中的数据值。

接口方法(与 IRowsetUpdate 一起使用)

名称 描述
GetOriginalData 获取最近传输到数据源或从数据源获取的数据,忽略挂起的更改。
GetPendingRows 返回具有挂起的更改的行列表。
GetRowStatus 返回指定行的状态。
撤消 撤消自上次提取或更新以来对行进行的任何更改。
更新 传输自上次提取或更新以来对行进行的任何更改。

实现方法(回调)

名称 描述
IsUpdateAllowed 用于在允许更新之前检查安全性、完整性等。

数据成员

名称 描述
m_mapCachedData 包含延迟操作的原始数据。

注解

应首先阅读并了解 IRowsetChange 的文档,因为文档中所述的所有内容也适用于这里。 还应阅读“OLE DB 程序员参考”第 6 章中关于设置数据的内容

IRowsetUpdateImpl 实现 OLE DB IRowsetUpdate 接口,使使用者能够延迟将使用 IRowsetChange 进行的更改传输到数据源,以及在传输之前撤消更改。

重要

强烈建议在尝试实现提供程序之前阅读以下文档:

IRowsetUpdateImpl::SetData

设置一列或多列中的数据值。

语法

STDMETHOD (SetData )(HROW hRow,
   HACCESSOR hAccessor,
   void* pSrcData);

参数

请参阅“OLE DB 程序员参考”中的 IRowsetChange::SetData

备注

此方法重写 IRowsetChangeImpl::SetData 方法,但包括原始数据的缓存,以允许立即或延迟处理操作。

IRowsetUpdateImpl::GetOriginalData

获取最近传输到数据源或从数据源获取的数据,忽略挂起的更改。

语法

STDMETHOD (GetOriginalData )(HROW hRow,
   HACCESSOR hAccessor,
   void* pData);

参数

请参阅“OLE DB 程序员参考”中的 IRowsetUpdate::GetOriginalData

IRowsetUpdateImpl::GetPendingRows

返回具有挂起的更改的行列表。

语法

STDMETHOD (GetPendingRows )(HCHAPTER /* hReserved */,
   DBPENDINGSTATUS dwRowStatus,
   DBCOUNTITEM* pcPendingRows,
   HROW** prgPendingRows,
   DBPENDINGSTATUS** prgPendingStatus);

参数

hReserved
[in] 对应于 IRowsetUpdate::GetPendingRows 中的 hChapter 参数

有关其他参数,请参阅“OLE DB 程序员参考”中的 IRowsetUpdate::GetPendingRows

备注

有关详细信息,请参阅“OLE DB 程序员参考”中的 IRowsetUpdate::GetPendingRows

IRowsetUpdateImpl::GetRowStatus

返回指定行的状态。

语法

STDMETHOD (GetRowStatus )(HCHAPTER /* hReserved */,
   DBCOUNTITEM cRows,
   const HROW rghRows[],
   DBPENDINGSTATUS rgPendingStatus[]);

参数

hReserved
[in] 对应于 IRowsetUpdate::GetRowStatus 中的 hChapter 参数

有关其他参数,请参阅“OLE DB 程序员参考”中的 IRowsetUpdate::GetRowStatus

IRowsetUpdateImpl::Undo

撤消自上次提取或更新以来对行进行的任何更改。

语法

STDMETHOD (Undo )(HCHAPTER /* hReserved */,
   DBCOUNTITEM cRows,
   const HROW rghRows[ ],
   DBCOUNTITEM* pcRowsUndone,
   HROW** prgRowsUndone,
   DBROWSTATUS** prgRowStatus);

参数

hReserved
[in] 对应于 IRowsetUpdate::Undo 中的 hChapter 参数

pcRowsUndone
[out] 对应于 IRowsetUpdate::Undo 中的 pcRows 参数

prgRowsUndone
[in] 对应于 IRowsetUpdate::Undo 中的 prgRows 参数

有关其他参数,请参阅“OLE DB 程序员参考”中的 IRowsetUpdate::Undo

IRowsetUpdateImpl::Update

传输自上次提取或更新以来对行进行的任何更改。

语法

STDMETHOD (Update )(HCHAPTER /* hReserved */,
   DBCOUNTITEM cRows,
   const HROW rghRows[],
   DBCOUNTITEM* pcRows,
   HROW** prgRows,
   DBROWSTATUS** prgRowStatus);

参数

hReserved
[in] 对应于 IRowsetUpdate::Update 中的 hChapter 参数

有关其他参数,请参阅“OLE DB 程序员参考”中的 IRowsetUpdate::Update

注解

通过调用 IRowsetChangeImpl::FlushData 来传输更改。 使用者必须调用 CRowset::Update 才能使更改生效。 将 prgRowstatus 设置为适当的值,如“OLE DB 程序员参考”中的行状态中所述

IRowsetUpdateImpl::IsUpdateAllowed

重写此方法以在更新之前检查安全性、完整性等。

语法

HRESULT IsUpdateAllowed(DBPENDINGSTATUS /* [in] */ /* status */,
   HROW /* [in] */ /* hRowUpdate */,
   DBROWSTATUS* /* [out] */ /* pRowStatus */);

参数

status
[in] 行上挂起的操作的状态。

hRowUpdate
[in] 用户要更新的行的句柄。

pRowStatus
[out] 返回给用户的状态。

备注

如果确定应允许更新,则返回 S_OK;否则返回 E_FAIL。 如果允许更新,还需要将 IRowsetUpdateImpl::Update 中的 DBROWSTATUS 设置为适当的行状态

IRowsetUpdateImpl::m_mapCachedData

包含延迟操作的原始数据的映射。

语法

CAtlMap<
   HROW hRow,
   Storage* pData
>
m_mapCachedData;

参数

hRow
数据行的句柄。

pData
指向要缓存的数据的指针。 数据的类型为“存储”(用户记录类)。 请参阅 IRowsetUpdateImpl 类中的“存储”模板参数

另请参阅

OLE DB 提供程序模板
OLE DB 提供程序模板体系结构
创建可更新的提供程序