O cliente nativo do Microsoft SQL Server oferece suporte a IDBAsynchNotify?
-
20-09-2019 - |
Pergunta
Estou trabalhando em algum código OLE DB que executa consultas no MS SQL Server via ICommand::Execute
.Estou convertendo este código para operar de forma assíncrona, definindo o DBPROPVAL_ASYNCH_INITIALIZE
propriedade no comando antes de executar.
Eu prefiro registrar um IDBAsynchNotify
coletor para que meu código possa ser notificado sobre eventos, em vez de pesquisar ou bloquear via ISSAsynchStatus
.
O documentação para ICommand::Execute
Não mostra IConnectionPointContainer
como um aceitável riid
parâmetro, mas o mesmo documento, ao discutir o DB_S_ASYNCHRONOUS
código de retorno, sugere que é possível solicitar um IConnectionPointContainer
interface que eu poderia usar para registrar meu coletor de eventos.
Quando eu ligo ICommand::Execute
, passando IID_IConnectionPointContainer
Enquanto o riid
parâmetro, recebo o E_NOINTERFACE
erro.Eu também tentei definir o DBPROP_IConnectionPointContainer
propriedade antes Execute
mas recebi os mesmos resultados.
Se for preciso, vou usar ISSAsynchStatus
, mas prefiro usar IDBAsynchNotify
.É possível?
Solução 2
De acordo com a resposta em Esta postagem do blog cliente nativo do SQL Server Native, "Modelo de programação de notificação assíncrona" foi o quinto recurso mais importante que foi solicitado para o cliente nativo. Eu acho que isso responde à pergunta. Esperançosamente, a equipe do SQLNCLI abordará isso mais cedo ou mais tarde. Estou facilmente irritado com a pesquisa.
Outras dicas
Ver Executando operações assíncronas para detalhes específicos do SQL Native Client OLE Db, incluindo exemplos.O link diz que os únicos RIIDs aceitáveis são IID_IDBAsynchStatus e IID_ISSAsynchStatus, portanto, meu entendimento é que o modelo de programação é baseado em pool, não em notificação.