Freigeben über


Der Treiber-Manager

Der Treiber-Manager ist eine Bibliothek, die die Kommunikation zwischen Anwendungen und Treibern verwaltet. Auf Microsoft Windows-Plattformen ist der Treiber-Manager zum Beispiel eine Dynamic Link Library (DLL), die von Microsoft geschrieben wird und von Benutzern des weiterverteilbaren MDAC 2.8 SP1 SDK weiterverteilt werden kann.

Der Treiber-Manager dient hauptsächlich als Hilfsmittel für Anwendungsentwickler und löst eine Reihe von Problemen, die allen Anwendungen gemeinsam sind. Dazu gehören das Ermitteln, welcher Treiber basierend auf einem Datenquellennamen geladen werden soll, das Laden und Entladen von Treibern und das Aufrufen von Funktionen in Treibern.

Um zu verstehen, warum Letzteres ein Problem ist, sollten Sie überlegen, was passieren würde, wenn die Anwendung Funktionen im Treiber direkt aufrufen würde. Wenn die Anwendung nicht direkt mit einem bestimmten Treiber verknüpft wäre, müsste sie eine Tabelle mit Zeigern auf die Funktionen in diesem Treiber erstellen und diese Funktionen per Zeiger aufrufen. Die Verwendung desselben Codes für mehr als einen Treiber würde die Sache noch komplexer machen. Die Anwendung müsste zuerst einen Funktionszeiger so festlegen, dass er auf die richtige Funktion im richtigen Treiber zeigt, und dann die Funktion über diesen Zeiger aufrufen.

Der Treiber-Manager löst dieses Problem, indem er eine einzige Stelle zum Aufrufen aller Funktionen bereitstellt. Die Anwendung ist mit dem Treiber-Manager verknüpft und ruft ODBC-Funktionen im Treiber-Manager und nicht den Treiber auf. Die Anwendung bestimmt den Zieltreiber und die Datenquelle mit einem Verbindungshandle. Wenn ein Treiber geladen wird, erstellt der Treiber-Manager eine Tabelle mit Zeigern auf die Funktionen in diesem Treiber. Anhand des von der Anwendung übergebenen Verbindungshandles findet er die Adresse der Funktion im Zieltreiber und ruft diese Funktion nach der Adresse auf.

In den meisten Fällen übergibt der Treiber-Manager einfach Funktionsaufrufe von der Anwendung an den richtigen Treiber. Er implementiert jedoch auch einige Funktionen (SQLDataSources, SQLDrivers und SQLGetFunctions) und führt eine grundlegende Fehlerüberprüfung durch. Beispielsweise überprüft der Treiber-Manager, dass Handles keine NULL-Zeiger sind, dass Funktionen in der richtigen Reihenfolge aufgerufen werden und dass bestimmte Funktionsargumente gültig sind. Eine vollständige Beschreibung der vom Treiber-Manager überprüften Fehler finden Sie im Referenzabschnitt für jede Funktion und in Anhang B: ODBC-Statusübergangstabellen.

Die letzte wichtige Rolle des Treiber-Managers ist das Laden und Entladen von Treibern. Die Anwendung lädt und entlädt nur den Treiber-Manager. Wenn ein bestimmter Treiber verwendet werden soll, ruft sie eine Verbindungsfunktion (SQLConnect, SQLDriverConnect oder SQLBrowseConnect) im Treiber-Manager auf und gibt den Namen einer bestimmten Datenquelle oder eines bestimmten Treibers an, z. B. „Ressoucenerfassung“ oder „SQL Server“. Anhand dieses Namens durchsucht der Treiber-Manager die Datenquelleninformationen nach dem Dateinamen des Treibers, z. B. Sqlsrvr.dll. Dann lädt er den Treiber (vorausgesetzt, er ist nicht bereits geladen), speichert die Adresse jeder Funktion im Treiber und ruft die Verbindungsfunktion im Treiber auf, die sich dann selbst initialisiert und eine Verbindung mit der Datenquelle herstellt.

Wenn die Anwendung mit der Verwendung des Treibers fertig ist, ruft sie SQLDisconnect im Treiber-Manager auf. Der Treiber-Manager ruft diese Funktion im Treiber auf, die die Verbindung mit der Datenquelle trennt. Der Treiber-Manager behält den Treiber jedoch im Arbeitsspeicher für den Fall, dass die Anwendung erneut eine Verbindung herstellen möchte. Er entlädt den Treiber nur, wenn die Anwendung die vom Treiber verwendete Verbindung freigibt oder die Verbindung für einen anderen Treiber verwendet und keine anderen Verbindungen den Treiber verwenden. Eine vollständige Beschreibung der Rolle des Treiber-Managers beim Laden und Entladen von Treibern finden Sie unter Die Rolle des Treibermanagers im Verbindungsprozess.