接收通知
更新:2007 年 11 月
OLE DB 提供用于在事件发生时接收通知的接口。这些接口在“OLE DB 程序员参考”的 OLE DB 对象通知中进行了描述。这些事件的设置使用标准的 COM 连接点机制。例如,希望通过 IRowsetNotify 检索事件的 ATL 对象通过将 IRowsetNotify 添加到类派生列表中并通过 COM_INTERFACE_ENTRY 宏将其公开,从而实现 IRowsetNotify 接口。
IRowsetNotify 具有三种方法,可以在不同时间进行调用。如果只想响应其中的一种方法,则可以使用 IRowsetNotifyImpl 类,它对您不感兴趣的方法返回 E_NOTIMPL。
创建行集合时,必须告知提供程序希望使返回的行集合对象支持 IConnectionPointContainer(需要用它设置通知)。
下面的代码演示如何从 ATL 对象打开行集合并使用 AtlAdvise 函数设置通知接收器。AtlAdvise 返回调用 AtlUnadvise 时使用的 Cookie。
CDBPropSet propset(DBPROPSET_ROWSET);
propset.AddProperty(DBPROP_IConnectionPointContainer, true);
product.Open(session, _T("Products"), &propset);
AtlAdvise(product.m_spRowset, GetUnknown(), IID_IRowsetNotify, &m_dwCookie);