Dela via


Drivrutinshanteraren

Driver Manager är ett bibliotek som hanterar kommunikation mellan program och drivrutiner. På Microsoft Windows-plattformar är till exempel Driver Manager ett DLL-bibliotek (Dynamic Link Library) som är skrivet av Microsoft och kan distribueras om av användare av det omdistribuerbara MDAC 2.8 SP1 SDK.

Driver Manager finns främst som en bekvämlighet för programförfattare och löser ett antal problem som är gemensamma för alla program. Dessa omfattar att avgöra vilken drivrutin som ska läsas in baserat på ett datakällans namn, läsa in och ta bort drivrutiner och anropa funktioner i drivrutiner.

Om du vill se varför det senare är ett problem bör du överväga vad som skulle hända om programmet anropade funktioner direkt i drivrutinen. Om programmet inte länkades direkt till en viss drivrutin skulle det behöva skapa en tabell med pekare till funktionerna i drivrutinen och anropa dessa funktioner med pekare. Om du använder samma kod för mer än en drivrutin i taget skulle ytterligare en komplexitetsnivå läggas till. Programmet måste först ange en funktionspekare för att peka på rätt funktion i rätt drivrutin och sedan anropa funktionen via den pekaren.

Driver Manager löser det här problemet genom att tillhandahålla en enda plats där varje funktion kan anropas. Programmet är länkat till Driver Manager och anropar ODBC-funktioner i Driver Manager, inte drivrutinen. Programmet identifierar måldrivrutinen och datakällan med ett anslutningshandtag. När drivrutinen läses in skapar Driver Manager en tabell med pekare till funktionerna i drivrutinen. Den använder anslutningshandtaget som skickas av programmet för att hitta adressen till funktionen i måldrivrutinen och anropar funktionen efter adress.

För det mesta skickar Driver Manager bara funktionsanrop från programmet till rätt drivrutin. Men den implementerar även vissa funktioner (SQLDataSources, SQLDrivers och SQLGetFunctions) och utför grundläggande felkontroll. Till exempel kontrollerar Driver Manager att handtag inte är null-pekare, att funktioner anropas i rätt ordning och att vissa funktionsargument är giltiga. En fullständig beskrivning av de fel som kontrolleras av Drivrutinshanteraren finns i referensavsnittet för varje funktion och bilaga B: ODBC-tillståndsövergångstabeller.

Den sista huvudrollen för Drivrutinshanteraren är inläsning och avlastning av drivrutiner. Programmet läser in och avinstallerar endast Drivrutinshanteraren. När den vill använda en viss drivrutin anropas en anslutningsfunktion (SQLConnect, SQLDriverConnect eller SQLBrowseConnect) i Driver Manager och anger namnet på en viss datakälla eller drivrutin, till exempel "Redovisning" eller "SQL Server". Med det här namnet söker Driver Manager igenom datakällans information efter drivrutinens filnamn, till exempel Sqlsrvr.dll. Den läser sedan in drivrutinen (förutsatt att den inte redan har lästs in), lagrar adressen för varje funktion i drivrutinen och anropar anslutningsfunktionen i drivrutinen, som sedan initierar sig själv och ansluter till datakällan.

När programmet är klart med drivrutinen anropas SQLDisconnect i Driver Manager. Drivrutinsansvarig anropar den här funktionen i drivrutinen, som kopplar bort datakällan. Drivrutinshanteraren håller dock drivrutinen i minnet om programmet återansluter till den. Den tar endast bort drivrutinen när programmet frigör anslutningen som används av drivrutinen eller använder anslutningen för en annan drivrutin, och inga andra anslutningar använder drivrutinen. En fullständig beskrivning av drivrutinshanterarens roll vid inläsning och avlastning av drivrutiner finns i Drivrutinshanterarens roll i anslutningsprocessen.