Delen via


Functietoewijzing in de stuurprogramma-manager

Het stuurprogrammabeheer ondersteunt twee toegangspunten voor functies die tekenreeksargumenten gebruiken. De ongedecoreerde functie (SQLDriverConnect) is de ANSI-vorm van de functie. Het Unicode-formulier is ingericht met een W (SQLDriverConnectW.)

Het ODBC-headerbestand ondersteunt ook functies die zijn ingericht met een A, (SQLDriverConnectA) voor het gemak van gemengde ANSI-/Unicode-toepassingen. Oproepen van de A-functies zijn in feite oproepen naar het ongedecoreerde toegangspunt (SQLDriverConnect).

Als de toepassing is gecompileerd met de _UNICODE #define, wijst het ODBC-headerbestand niet-opgemaakte functieaanroepen (SQLDriverConnect) toe aan de Unicode-versie (SQLDriverConnectW.)

Driver Manager herkent een stuurprogramma als Unicode-stuurprogramma als SQLConnectW wordt ondersteund door het stuurprogramma.

Als het stuurprogramma een Unicode-stuurprogramma is, voert Driver Manager als volgt functie-aanroepen uit:

  • Geeft een functie zonder tekenreeksargumenten of parameters rechtstreeks door aan het stuurprogramma.

  • Stuurt Unicode-functies (met het W-achtervoegsel) rechtstreeks door aan het stuurprogramma.

  • Converteert een ANSI-functie (met het achtervoegsel A) naar een Unicode-functie (met het W-achtervoegsel) door de tekenreeksargumenten te converteren naar Unicode-tekens en de Unicode-functie door te geven aan het stuurprogramma.

Als het stuurprogramma een ANSI-stuurprogramma is, voert Driver Manager als volgt functieaanroepen uit:

  • Hiermee worden functies zonder tekenreeksargumenten of parameters rechtstreeks doorgegeven aan het stuurprogramma.

  • Converteert Unicode-functies (met het W-achtervoegsel) naar een ANSI-functieaanroep en geeft deze door aan het stuurprogramma.

  • Geeft een ANSI-functie rechtstreeks door aan het stuurprogramma.

De Driver Manager biedt interne ondersteuning voor Unicode. Als gevolg hiervan worden de optimale prestaties verkregen door een Unicode-toepassing die werkt met een Unicode-stuurprogramma, omdat Driver Manager gewoon Unicode-functies doorgeeft aan het stuurprogramma. Wanneer een ANSI-toepassing werkt met een ANSI-stuurprogramma, moet Driver Manager tekenreeksen van ANSI converteren naar Unicode bij het verwerken van bepaalde functies, zoals SQLDriverConnect. Nadat de functie is verwerkt, moet Driver Manager de Unicode-tekenreeks weer converteren naar ANSI voordat de functie naar het ANSI-stuurprogramma wordt verzonden.

Een toepassing mag de afhankelijke parameterbuffers niet wijzigen of lezen wanneer het stuurprogramma SQL_STILL_EXECUTING of SQL_NEED_DATA retourneert. Driver Manager laat de buffers gebonden aan ANSI totdat het stuurprogramma SQL_SUCCESS, SQL_SUCCESS_WITH_INFO of SQL_ERROR retourneert. Een multithreaded-toepassing mag geen toegang krijgen tot eventuele afhankelijke parameterwaarden waarop een andere thread een SQL-instructie uitvoert. Driver Manager converteert de gegevens van Unicode naar ANSI 'ter plaatse' en de andere thread kan ANSI-gegevens in deze buffers zien terwijl het stuurprogramma nog steeds de SQL-instructie verwerkt. Toepassingen die Unicode-gegevens aan een ANSI-stuurprogramma binden, mogen niet twee verschillende kolommen aan hetzelfde adres binden.