Behandeln von ADO-Ereignissen

Das ADO-Ereignismodell unterstützt bestimmte synchrone und asynchrone ADO-Vorgänge, die Ereignisse oder Benachrichtigungen ausstellen, bevor der Vorgang gestartet wird oder nachdem er abgeschlossen wurde. Ein Ereignis ist ein Aufruf einer Ereignishandlerroutine, die Sie in Ihrer Anwendung definieren.

Wenn Sie Handlerfunktionen oder Prozeduren für die Gruppe von Ereignissen bereitstellen, die vor dem Starten des Vorgangs erfolgen, können Sie die Parameter überprüfen oder ändern, die an den Vorgang übergeben wurden. Da er noch nicht ausgeführt wurde, können Sie den Vorgang entweder abbrechen oder abschließen.

Die Ereignisse, die nach Abschluss eines Vorgangs auftreten, sind besonders wichtig, wenn Sie ADO asynchron verwenden. Beispielsweise wird eine Anwendung, die einen asynchronen Recordset.Open-Vorgang startet, durch das Ereignis „Ausführung abgeschlossen“ benachrichtigt, wenn der Vorgang abgeschlossen ist.

Durch das ADO-Ereignismodells wird Ihrer Anwendung ein Mehraufwand zugemutet, aber es bietet weitaus mehr Flexibilität als andere Methoden zum Umgang mit asynchronen Vorgängen, wie z. B. das Überwachen der Eigenschaft Status eines Objekts mit einer Schleife.

Hinweis

Um Ereignisse zu behandeln, muss ADO über ein Nachrichtensystem verfügen oder in einem Singlethread-Apartment-(STA-)Modell verwendet werden. ADO-Ereignisse werden intern durch Generierung eines ausgeblendeten Fensters gehandhabt. ADO veröffentlicht Nachrichten in diesem Fenster, wenn Ereignisse ausgelöst werden müssen. Dies geschieht, um sicherzustellen, dass Ereignisse an den Thread gesendet werden, der IConnectionPoint::Advise auf dem Verbindungspunkt aufgerufen hat. Diese Architektur kann Probleme verursachen, wenn der Thread, der die Benachrichtigungen empfangen sollte, keine Windows-Nachrichten unterstützt. Mögliche Probleme sind z. B. ADO-Ereignisse, die nicht an den Thread gesendet werden, und eine globale Zeitüberschreitung bei der Übertragung an das Fenster sowie eine mögliche Verlangsamung des gesamten Systems, weil die ausgeblendeten Fenster die Nachrichten nicht verarbeiten. Bei STA-Threads wird in der Regel ein Nachrichtensystem ausgeführt, sodass dieses Problem bei STA-Threads nicht auftritt. MTA-Threads verfügen hingegen in der Regel nicht über ein Nachrichtensystem, sodass das Problem in der Regel bei MTA-Threads auftritt.

In diesem Abschnitt werden die folgenden Themen behandelt:

Weitere Informationen

ADO-Ereignishandler – Übersicht
ADO-Ereignisinstanziierung nach Sprache
ADO-Ereignisse
Ereignisparameter
Ereignistypen