0

我正在开发一些 OLE DB 代码,这些代码通过ICommand::Execute. 我通过DBPROPVAL_ASYNCH_INITIALIZE在执行之前设置命令上的属性来将此代码转换为异步操作。

我更喜欢注册一个IDBAsynchNotify接收器,以便我的代码可以收到事件通知,而不是通过ISSAsynchStatus.

文档ICommand::Execute并未显示为IConnectionPointContainer可接受的riid参数,但同一文档在讨论DB_S_ASYNCHRONOUS返回代码时表明可以请求IConnectionPointContainer我可以用来注册我的事件接收器的接口。

当我调用,作为参数ICommand::Execute传递时,我收到错误。我之前也尝试过设置属性,但我收到了相同的结果。IID_IConnectionPointContainerriidE_NOINTERFACEDBPROP_IConnectionPointContainerExecute

如果必须,我会使用ISSAsynchStatus,但我更愿意使用IDBAsynchNotify. 可能吗?

4

2 回答 2

0

根据这篇 SQL Server Native Client 博客文章的回复,“异步通知编程模型”是本机客户端请求的第五个最重要的特性。我想这回答了这个问题。希望 sqlncli 团队能尽快解决这个问题。我很容易被投票惹恼。

于 2010-05-30T07:08:31.647 回答
0

请参阅为 SQL Native Client OLE Db 细节执行异步操作,包括示例。该链接说唯一可接受的 RIID 是 IID_IDBAsynchStatus 和 IID_ISSAsynchStatus,所以我的理解是编程模型是基于池的,而不是基于通知的。

于 2010-01-13T03:02:03.880 回答