Delen via


Statusovergangen

ODBC definieert afzonderlijke statussen voor elke omgeving, elke verbinding en elke instructie. De omgeving heeft bijvoorbeeld drie mogelijke statussen: Niet-toegewezen (waarin geen omgeving wordt toegewezen), Toegewezen (waarin een omgeving wordt toegewezen, maar geen verbindingen worden toegewezen) en Verbinding (waarin een omgeving en een of meer verbindingen worden toegewezen). Verbindingen hebben zeven mogelijke statussen; instructies hebben 13 mogelijke statussen.

Een bepaald item, zoals aangegeven door de ingang, wordt verplaatst van de ene status naar het andere wanneer de toepassing een bepaalde functie of functies aanroept en de ingang doorgeeft aan dat item. Een dergelijke beweging wordt een statusovergang genoemd. Als u bijvoorbeeld een omgevingshandle toewijst met SQLAllocHandle, wordt de omgeving verplaatst van Niet-toegewezen naar Toegewezen, en met SQLFreeHandle wordt deze handle weer vrijgegeven van Toegewezen naar Niet-toegewezen. ODBC definieert een beperkt aantal overgangen van juridische status, wat een andere manier is om te zeggen dat functies in een bepaalde volgorde moeten worden aangeroepen.

Sommige functies, zoals SQLGetConnectAttr, hebben helemaal geen invloed op de status. Andere functies zijn van invloed op de status van één item. SQLDisconnect verplaatst bijvoorbeeld een verbinding van een verbindingsstatus naar een toegewezen status. Ten slotte hebben sommige functies invloed op de status van meer dan één item. Als u bijvoorbeeld een verbindingsgreep toewijst met SQLAllocHandle , wordt een verbinding verplaatst van een niet-toegewezen status naar een toegewezen status en wordt de omgeving verplaatst van toegewezen naar een verbindingsstatus.

Als een toepassing een functie niet in orde aanroept, retourneert de functie een statusovergangsfout. Als een omgeving bijvoorbeeld de verbindingsstatus heeft en de toepassing SQLFreeHandle aanroept met die omgevingsgreep, retourneert SQLFreeHandle SQLSTATE HY010 (functiereeksfout), omdat deze alleen kan worden aangeroepen wanneer de omgeving de status Toegewezen heeft. Door dit te definiëren als een ongeldige statusovergang, voorkomt ODBC dat de toepassing de omgeving vrij maakt terwijl er actieve verbindingen zijn.

Sommige statusovergangen zijn inherent aan het ontwerp van ODBC. Het is bijvoorbeeld niet mogelijk om een verbindingsgreep toe te wijzen zonder eerst een omgevingsgreep toe te wijzen, omdat voor de functie die een verbindingsgreep toewijst een omgevingsgreep is vereist. Andere statusovergangen worden afgedwongen door de stuurprogrammabeheerder en de stuurprogramma's. SqlExecute voert bijvoorbeeld een voorbereide instructie uit. Als de statement-handle die is doorgegeven niet de status 'Voorbereid' heeft, retourneert SQLExecute SQLSTATE HY010 (fout in functiereeks).

Vanuit het oogpunt van de toepassing zijn statusovergangen meestal eenvoudig: overgangen van juridische status gaan meestal hand in hand met de stroom van een goed geschreven toepassing. Statusovergangen zijn complexer voor Driver Manager en de stuurprogramma's, omdat ze de status van de omgeving, elke verbinding en elke instructie moeten bijhouden. Het grootste deel van dit werk wordt gedaan door de Driver Manager; het grootste deel van het werk dat door stuurprogramma's moet worden uitgevoerd, vindt plaats met instructies waarop de resultaten wachten.

In deel 1 en 2 van deze handleiding ('Inleiding tot ODBC' en 'Toepassingen en stuurprogramma's ontwikkelen') wordt meestal niet expliciet gesproken over statusovergangen. In plaats daarvan beschrijven ze de volgorde waarin functies moeten worden aangeroepen. Met 'Uitvoerinstructies' wordt bijvoorbeeld aangegeven dat een instructie moet worden voorbereid met SQLPrepare voordat deze kan worden uitgevoerd met SQLExecute. Zie bijlage B: ODBC-statusovergangen voor een volledige beschrijving van statussen en statusovergangen, waaronder welke overgangen worden gecontroleerd door Driver Manager en welke moeten worden gecontroleerd door stuurprogramma's.