Delen via


Rol van Driver Manager in het verbindingsproces

Houd er rekening mee dat toepassingen stuurprogrammafuncties niet rechtstreeks aanroepen. In plaats daarvan roepen ze Driver Manager-functies aan met dezelfde naam en de Driver Manager roept de stuurprogrammafuncties aan. Meestal gebeurt dit bijna onmiddellijk. De toepassing roept bijvoorbeeld SQLExecute aan in Driver Manager en na enkele foutcontroles roept Driver Manager SQLExecute aan in het stuurprogramma.

Het verbindingsproces verschilt. Wanneer de toepassing SQLAllocHandle aanroept met de SQL_HANDLE_ENV- en SQL_HANDLE_DBC-opties, wijst de functie alleen ingangen toe in Driver Manager. De Driver Manager roept deze functie niet aan in het stuurprogramma omdat het niet weet welk stuurprogramma moet worden aangeroepen. Evenzo, als de toepassing de handle van een niet-verbonden verbinding doorgeeft aan SQLSetConnectAttr of SQLGetConnectAttr, wordt de functie alleen uitgevoerd door de Driver Manager. De kenmerkwaarde wordt opgeslagen of opgehaald uit de verbindingsgreep en retourneert SQLSTATE 08003 (Verbinding niet geopend) wanneer een waarde wordt opgehaald voor een kenmerk dat niet is ingesteld en waarvoor ODBC geen standaardwaarde definieert.

Wanneer de toepassing SQLConnect, SQLDriverConnect of SQLBrowseConnect aanroept, bepaalt de Driver Manager eerst welk stuurprogramma moet worden gebruikt. Vervolgens wordt nagegaan of er momenteel een stuurprogramma bij de connectie is geladen.

  • Als er geen stuurprogramma voor de verbinding is geladen, controleert Driver Manager of het opgegeven stuurprogramma op een andere verbinding in dezelfde omgeving wordt geladen. Als dat niet zo is, laadt Driver Manager het stuurprogramma op de verbinding en roept SQLAllocHandle aan in het stuurprogramma met de optie SQL_HANDLE_ENV.

    Vervolgens roept Driver Manager SQLAllocHandle aan in het stuurprogramma met de optie SQL_HANDLE_DBC, ongeacht of deze al dan niet zojuist is geladen. Als de toepassing verbindingskenmerken instelt, roept Driver Manager SQLSetConnectAttr aan in het stuurprogramma; als er een fout optreedt, retourneert de verbindingsfunctie van Driver Manager SQLSTATE IM006 ( SQLSetConnectAttr van stuurprogramma is mislukt). Ten slotte roept Driver Manager de verbindingsfunctie aan in het stuurprogramma.

  • Als het opgegeven stuurprogramma op de verbinding wordt geladen, roept Driver Manager alleen de verbindingsfunctie in het stuurprogramma aan. In dit geval moet het stuurprogramma ervoor zorgen dat alle verbindingskenmerken op de verbinding de huidige instellingen behouden.

  • Als er een ander stuurprogramma wordt geladen voor de verbinding, roept Driver Manager SQLFreeHandle aan in het stuurprogramma om de verbinding vrij te maken. Als er geen andere verbindingen zijn die gebruikmaken van het stuurprogramma, roept Driver Manager SQLFreeHandle aan in het stuurprogramma om de omgeving vrij te maken en het stuurprogramma te ontladen. Driver Manager voert vervolgens dezelfde bewerkingen uit als wanneer een stuurprogramma niet op de verbinding wordt geladen.

Driver Manager vergrendelt de omgevingsgreep (henv) voordat de SQLAllocHandle en SQLFreeHandle van een stuurprogramma worden aangeroepen wanneer HandleType is ingesteld op SQL_HANDLE_DBC.

Wanneer de toepassing SQLDisconnect aanroept, roept Driver Manager SQLDisconnect aan in het stuurprogramma. Het stuurprogramma blijft echter geladen als de toepassing opnieuw verbinding maakt met het stuurprogramma. Wanneer de toepassing SQLFreeHandle aanroept met de optie SQL_HANDLE_DBC, roept Driver Manager SQLFreeHandle aan in het stuurprogramma. Als het stuurprogramma niet door andere verbindingen wordt gebruikt, roept de Driver Manager in het stuurprogramma SQLFreeHandle aan met de optie SQL_HANDLE_ENV en laadt het stuurprogramma uit.