支持通知

在提供程序和使用者上实现连接点接口

若要实现通知,提供程序类必须从 IRowsetNotifyCPIConnectionPointContainer 继承。

IRowsetNotifyCP 实现连接点接口 IRowsetNotify 的提供程序站点。 IRowsetNotifyCP 实现广播函数,将行集合内容的更改通知给连接点 IID_IRowsetNotify 上的侦听器。

注意,还必须使用 IRowsetNotifyImpl 实现和注册使用者上的 IRowsetNotify(也称为“接收”),以便使用者处理通知。 有关如何实现使用者上的连接点接口的信息,请参见接收通知

另外,该类还必须包含定义连接点项的映射,如下所示:

BEGIN_CONNECTION_POINT_MAP
   CONNECTIONPOINT_ENTRY (IID_IRowsetNotify)
END_CONNECTION_POINT_MAP

添加 IRowsetNotify

若要添加 IRowsetNotify,需要将 IConnectionPointContainerImpl<rowset-name> 和 IRowsetNotifyCP<rowset-name> 添加到继承链。

例如,下面是 UpdatePV 中 RUpdateRowset 的继承链:

备注

代码示例可能与此处列出的不同;此代码示例应视为较新版本。

///////////////////////////////////////////////////////////////////////////
// class RUpdateRowset (in rowset.h)

class RUpdateRowset : 
public CRowsetImpl< RUpdateRowset, CAgentMan, CUpdateCommand, 
         CAtlArray< CAgentMan, CAtlArray<CAgentMan> >, CSimpleRow, 
         IRowsetScrollImpl< RUpdateRowset, IRowsetScroll > >,
      public IRowsetUpdateImpl< RUpdateRowset, CAgentMan >,
      public IConnectionPointContainerImpl<RUpdateRowset>,
      public IRowsetNotifyCP<RUpdateRowset>

at4a5k5t.collapse_all(zh-cn,VS.110).gif设置 COM 映射项

还需要将以下代码添加到行集合中的 COM 映射:

COM_INTERFACE_ENTRY(IConnectionPointContainer)
COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)

这些宏允许任何为连接点容器(IRowsetNotify 的基)调用 QueryInterface 的人查找提供程序上被请求的接口。 有关如何使用连接点的示例,请参见 ATL POLYGON 示例和教程。

at4a5k5t.collapse_all(zh-cn,VS.110).gif设置连接点映射项

还需要添加连接点映射。 它看起来应像:

BEGIN_CONNECTION_POINT_MAP(rowset-name)
     CONNECTION_POINT_ENTRY(_uuidof(IRowsetNotify))
END_CONNECTION_POINT_MAP()

此连接点映射允许查找 IRowsetNotify 接口的组件在提供程序中查找它。

at4a5k5t.collapse_all(zh-cn,VS.110).gif设置属性

还需要将以下属性添加到提供程序。 只需要添加基于所支持接口的属性。

属性

如果支持则添加

DBPROP_IConnectionPointContainer

始终

DBPROP_NOTIFICATIONGRANULARITY

始终

DBPROP_NOTIFICATIONPHASES

始终

DBPROP_NOTIFYCOLUMNSET

IRowsetChange

DBPROP_NOTIFYROWDELETE

IRowsetChange

DBPROP_NOTIFYROWINSERT

IRowsetChange

DBPROP_NOTIFYROWSETFETCHPOSITIONCHANGE

始终

DBPROP_NOTIFYROWFIRSTCHANGE

IRowsetUpdate

DBPROP_NOTIFYROWSETRELEASE

始终

DBPROP_NOTIFYROWUNDOCHANGE

IRowsetUpdate

DBPROP_NOTIFYROWUNDODELETE

IRowsetUpdate

DBPROP_NOTIFYROWUNDOINSERT

IRowsetUpdate

DBPROP_NOTIFYROWUPDATE

IRowsetUpdate

通知的大部分实现已嵌入在 OLE DB 提供程序模板中。 由于 Visual C++ .NET 中某个编译器功能的原因,如果不将 IRowsetNotifyCP 添加到继承链,编译器将从编译流中移除所有那些代码,从而使代码大小变小。

请参见

概念

高级提供程序技术