我正在研究一些通过ICommand::Execute
在MS SQL Server上运行查询的OLE DB代码。我正在通过在执行之前在命令上设置DBPROPVAL_ASYNCH_INITIALIZE
属性来转换此代码以异步操作。
我更愿意注册IDBAsynchNotify
接收器,以便我的代码可以通知事件,而不是通过ISSAsynchStatus
进行轮询或阻止。
ICommand::Execute
的{{3}}未将IConnectionPointContainer
显示为可接受的riid
参数,但在讨论DB_S_ASYNCHRONOUS
返回代码时,同一文档建议可以请求IConnectionPointContainer
接口,我可以使用它来注册我的事件接收器。
当我致电ICommand::Execute
,将IID_IConnectionPointContainer
作为riid
参数传递时,收到E_NOINTERFACE
错误。我还尝试在DBPROP_IConnectionPointContainer
之前设置Execute
属性,但我收到了相同的结果。
如果必须,我会使用ISSAsynchStatus
,但我更愿意使用IDBAsynchNotify
。有可能吗?
答案 0 :(得分:0)
有关SQL Native Client OLE Db的详细信息,请参阅Performing Asynchronous Operations,包括示例。链接说唯一可接受的RIID是IID_IDBAsynchStatus和IID_ISSAsynchStatus,所以我的理解是编程模型是基于池的,而不是基于通知的。
答案 1 :(得分:0)
根据this SQL Server Native Client blog post的回复,“异步通知编程模型”是本机客户端请求的第五个最重要的功能。我猜这回答了这个问题。希望sqlncli团队能够尽快解决这个问题。我很容易被投票所困扰。