Je travaille sur du code OLE DB qui exécute des requêtes sur MS SQL Server via ICommand::Execute
. Je convertis ce code pour fonctionner de manière asynchrone en définissant la propriété DBPROPVAL_ASYNCH_INITIALIZE
sur la commande avant l'exécution.Le client natif Microsoft SQL Server prend-il en charge IDBAsynchNotify?
Je préfère enregistrer un évier IDBAsynchNotify
pour que mon code peut être informé des événements, par opposition à l'interrogation ou le blocage par ISSAsynchStatus
.
Le documentation pour ICommand::Execute
ne montre pas IConnectionPointContainer
comme paramètre riid
acceptable, mais le même document, lors de l'examen du code DB_S_ASYNCHRONOUS
de retour, suggère qu'il est possible de demander une interface IConnectionPointContainer
que je pourrais utiliser pour enregistrer mon récepteur d'événements.
Lorsque j'appelle ICommand::Execute
, en passant IID_IConnectionPointContainer
en tant que le paramètre riid
, l'erreur E_NOINTERFACE
s'affiche. J'ai également essayé de placer la propriété DBPROP_IConnectionPointContainer
avant Execute
mais j'ai reçu les mêmes résultats. Si je dois, je vais utiliser ISSAsynchStatus
, mais je préfère utiliser IDBAsynchNotify
. C'est possible?
Je lirais ce document précédemment, et le comportement que je récupère du code le suggérerait certainement. Je suppose que je suis curieux de savoir s'il existe des preuves qui contredisent cela. –
Je spécule ici, mais avez-vous essayé de demander IID_IUnknown, puis QueryInterface sur le résultat pour IID_IConnectionPointContainer? –
Juste essayé, avec le même résultat: E_NOINTERFACE. –