Die Rolle des Treiber-Managers im Verbindungsprozess
Denken Sie daran, dass Anwendungen keine Treiberfunktionen direkt aufrufen. Stattdessen rufen sie Treiber-Manager-Funktionen mit demselben Namen auf, und der Treiber-Manager ruft die Treiberfunktionen auf. In der Regel geschieht dies fast sofort. Die Anwendung ruft z. B. SQLExecute im Treiber-Manager auf und ruft nach einigen Fehlerüberprüfungen SQLExecute im Treiber auf.
Der Verbindungsvorgang unterscheidet sich. Wenn die Anwendung SQLAllocHandle mit den optionen SQL_HANDLE_ENV und SQL_HANDLE_DBC aufruft, weist die Funktion Handles nur im Treiber-Manager zu. Der Treiber-Manager ruft diese Funktion nicht im Treiber auf, da er nicht weiß, welcher Treiber aufgerufen werden soll. Wenn die Anwendung das Handle einer nicht verbundenen Verbindung an SQLSet Verbinden Attr oder SQLGet Verbinden Attr übergibt, führt nur der Treiber-Manager die Funktion aus. Er speichert oder ruft den Attributwert aus dem Verbindungshandle ab und gibt SQLSTATE 08003 (Verbinden ion nicht geöffnet) zurück, wenn ein Wert für ein Attribut abgerufen wird, das nicht festgelegt wurde und für das ODBC keinen Standardwert definiert.
Wenn die Anwendung SQL Verbinden, SQLDriver Verbinden oder SQLBrowse Verbinden aufruft, bestimmt der Treiber-Manager zuerst, welcher Treiber verwendet werden soll. Anschließend wird überprüft, ob ein Treiber derzeit in der Verbindung geladen ist:
Wenn kein Treiber für die Verbindung geladen wird, überprüft der Treiber-Manager, ob der angegebene Treiber in einer anderen Verbindung in derselben Umgebung geladen wird. Andernfalls lädt der Treiber-Manager den Treiber in die Verbindung und ruft SQLAllocHandle im Treiber mit der Option SQL_HANDLE_ENV auf.
Der Treiber-Manager ruft dann SQLAllocHandle im Treiber mit der Option SQL_HANDLE_DBC auf, unabhängig davon, ob sie gerade geladen wurde. Wenn die Anwendung Verbindungsattribute festgelegt hat, ruft der Treiber-Manager SQLSet Verbinden Attr im Treiber auf. Wenn ein Fehler auftritt, gibt die Verbindungsfunktion des Treiber-Managers SQLSTATE IM006 zurück (SQLSet des Treibers Verbinden Attr fehlgeschlagen). Schließlich ruft der Treiber-Manager die Verbindungsfunktion im Treiber auf.
Wenn der angegebene Treiber für die Verbindung geladen wird, ruft der Treiber-Manager nur die Verbindungsfunktion im Treiber auf. In diesem Fall muss der Treiber sicherstellen, dass alle Verbindungsattribute für die Verbindung Standard die aktuellen Einstellungen enthalten.
Wenn ein anderer Treiber für die Verbindung geladen wird, ruft der Treiber-Manager SQLFreeHandle im Treiber auf, um die Verbindung freizuschalten. Wenn es keine anderen Verbindungen gibt, die den Treiber verwenden, ruft der Treiber-Manager SQLFreeHandle im Treiber auf, um die Umgebung frei zu geben und den Treiber zu entladen. Der Treiber-Manager führt dann dieselben Vorgänge aus, als wenn ein Treiber nicht in die Verbindung geladen wird.
Der Treiber-Manager sperrt das Umgebungshandle (Henv), bevor die SQLAllocHandle- und SQLFreeHandle-Instanz eines Treibers aufgerufen wird, wenn HandleType auf SQL_HANDLE_DBC festgelegt ist.
Wenn die Anwendung SQLDisconnect aufruft, ruft der Treiber-Manager SQLDisconnect im Treiber auf. Der Treiber wird jedoch geladen, falls die Anwendung erneut eine Verbindung mit dem Treiber herstellen kann. Wenn die Anwendung SQLFreeHandle mit der Option SQL_HANDLE_DBC aufruft, ruft der Treiber-Manager SQLFreeHandle im Treiber auf. Wenn der Treiber nicht von anderen Verbindungen verwendet wird, ruft der Treiber-Manager SQLFreeHandle im Treiber mit der Option SQL_HANDLE_ENV auf und entlädt den Treiber.