Поддерживает ли собственный клиент Microsoft SQL Server IDBAsynchNotify? - PullRequest
0 голосов
/ 13 января 2010

Я работаю над кодом OLE DB, который выполняет запросы на MS SQL Server через ICommand::Execute. Я преобразовываю этот код для асинхронной работы, установив свойство DBPROPVAL_ASYNCH_INITIALIZE в команде перед выполнением.

Я бы предпочел зарегистрировать приемник IDBAsynchNotify, чтобы мой код мог получать уведомления о событиях, а не опрашивать или блокировать через ISSAsynchStatus.

Документация для ICommand::Execute не показывает IConnectionPointContainer в качестве приемлемого параметра riid, но тот же документ при обсуждении кода возврата DB_S_ASYNCHRONOUS предполагает, что можно запросить IConnectionPointContainer интерфейс, который я мог бы использовать для регистрации моего приемника событий.

Когда я вызываю ICommand::Execute, передавая IID_IConnectionPointContainer в качестве параметра riid, я получаю ошибку E_NOINTERFACE. Я также пытался установить свойство DBPROP_IConnectionPointContainer до Execute, но получил те же результаты.

Если мне нужно, я буду использовать ISSAsynchStatus, но я бы предпочел использовать IDBAsynchNotify. Возможно ли это?

Ответы [ 2 ]

0 голосов
/ 30 мая 2010

Согласно ответу на в этом блоге собственного клиента SQL Server , "модель программирования асинхронных уведомлений" была пятой по важности функцией, запрошенной для собственного клиента. Я думаю, что это отвечает на вопрос. Надеемся, что команда sqlncli решит эту проблему раньше, чем позже. Меня легко раздражает опрос.

0 голосов
/ 13 января 2010

См. Выполнение асинхронных операций для спецификаций OLE Db собственного клиента SQL, включая примеры. Ссылка говорит, что единственными приемлемыми RIID являются IID_IDBAsynchStatus и IID_ISSAsynchStatus, поэтому я понимаю, что модель программирования основана на пуле, а не на уведомлении.

...