Dela via


Drivrutinshanterarens roll i anslutningsprocessen

Kom ihåg att program inte anropar drivrutinsfunktioner direkt. I stället anropar de funktionerna i Driver Manager med samma namn, och Driver Manager anropar drivrutinsfunktionerna. Vanligtvis händer detta nästan omedelbart. Programmet anropar till exempel SQLExecute i Driver Manager och efter några felkontroller anropar Driver Manager SQLExecute i drivrutinen.

Anslutningsprocessen är annorlunda. När programmet anropar SQLAllocHandle med alternativen SQL_HANDLE_ENV och SQL_HANDLE_DBC, allokeras handtag endast i Driver Manager. Drivrutinshanteraren anropar inte den här funktionen i drivrutinen eftersom den inte vet vilken drivrutin som ska anropas. På samma sätt, om programmet skickar handtaget för en anslutning som inte är ansluten till SQLSetConnectAttr eller SQLGetConnectAttr, kör endast Driver Manager funktionen. Det lagrar eller hämtar attributvärdet från anslutningshandtaget och returnerar SQLSTATE 08003 (anslutningen är inte öppen) när du hämtar ett värde för ett attribut som inte har angetts och för vilket ODBC inte definierar något standardvärde.

När programmet anropar SQLConnect, SQLDriverConnect eller SQLBrowseConnect avgör Driver Manager först vilken drivrutin som ska användas. Denna kontrollerar sedan om en drivrutin för närvarande är laddad på anslutningen:

  • Om ingen drivrutin läses in på anslutningen kontrollerar Driver Manager om den angivna drivrutinen läses in på en annan anslutning i samma miljö. Om inte, laddar Driver Manager drivrutinen på anslutningen och anropar SQLAllocHandle i drivrutinen med alternativet SQL_HANDLE_ENV.

    Driver Manager anropar sedan SQLAllocHandle i drivrutinen med alternativet SQL_HANDLE_DBC, oavsett om det just har lästs in eller inte. Om programmet anger några anslutningsattribut anropar Driver Manager SQLSetConnectAttr i drivrutinen. Om ett fel uppstår returnerar Driver Manager-anslutningsfunktionen SQLSTATE IM006 (drivrutins SQLSetConnectAttr misslyckades). Slutligen anropar Driver Manager anslutningsfunktionen i drivrutinen.

  • Om den angivna drivrutinen läses in för anslutningen anropar Driver Manager endast anslutningsfunktionen i drivrutinen. I det här fallet måste drivrutinen se till att alla anslutningsattribut på anslutningen behåller sina aktuella inställningar.

  • Om en annan drivrutin är laddad för anslutningen, anropar Driver Manager SQLFreeHandle i drivrutinen för att frigöra anslutningen. Om det inte finns några andra anslutningar som använder drivrutinen anropar Driver Manager SQLFreeHandle i drivrutinen för att frigöra miljön och ta bort drivrutinen. Drivrutinshanteraren utför sedan samma åtgärder som när en drivrutin inte läses in på anslutningen.

Driver Manager låser miljöhandtaget (henv) innan du anropar en drivrutins SQLAllocHandle och SQLFreeHandle när HandleType är inställt på SQL_HANDLE_DBC.

När programmet anropar SQLDisconnect anropar Driver Manager SQLDisconnect i drivrutinen. Dock lämnas drivrutinen laddad om applikationen återansluter till drivrutinen. När programmet anropar SQLFreeHandle med alternativet SQL_HANDLE_DBC anropar Driver Manager SQLFreeHandle i drivrutinen. Om drivrutinen inte används av några andra anslutningar, anropar Driver Manager sedan SQLFreeHandle i drivrutinen med alternativet SQL_HANDLE_ENV och avlastar drivrutinen.