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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top