Microsoft SQL Server本机客户端是否支持IDBAsynchNotify?

时间:2010-01-13 01:50:42

标签: sql-server oledb oledbcommand

我正在研究一些通过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。有可能吗?

2 个答案:

答案 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团队能够尽快解决这个问题。我很容易被投票所困扰。