2010-01-13 2 views
0

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?

Répondre

0

Selon la réponse sur this SQL Server Native Client blog post, "modèle de programmation de notification asynchrone" était la cinquième caractéristique la plus importante qui a été demandée pour le client natif. Je suppose que cela répond à la question. Espérons que l'équipe de sqlncli se penchera sur cette question plus tôt que plus tard. Je suis facilement ennuyé par les sondages.

0

Voir Performing Asynchronous Operations pour les détails de la spécification OLE Db SQL Native Client, y compris des exemples. Le lien indique que les seuls RIID acceptables sont IID_IDBAsynchStatus et IID_ISSAsynchStatus, donc je crois comprendre que le modèle de programmation est basé sur un pool, et non basé sur une notification.

+0

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. –

+0

Je spécule ici, mais avez-vous essayé de demander IID_IUnknown, puis QueryInterface sur le résultat pour IID_IConnectionPointContainer? –

+0

Juste essayé, avec le même résultat: E_NOINTERFACE. –

Questions connexes