Freigeben über


Funktionszuordnung im Treiber-Manager

Der Treiber-Manager unterstützt zwei Einstiegspunkte für Funktionen, die Zeichenfolgenargumente annehmen. Die nicht verbuchte Funktion (SQLDriver Verbinden) ist die ANSI-Form der Funktion. Das Unicode-Formular ist mit einem W (SQLDriver Verbinden W) versehen.

Die ODBC-Headerdatei unterstützt auch Funktionen, die mit einem A, (SQLDriver Verbinden A) versehen sind, um gemischte ANSI/Unicode-Anwendungen zu nutzen. Aufrufe an die A-Funktionen werden tatsächlich an den nicht bewerteten Einstiegspunkt (SQLDriver Verbinden) aufgerufen.)

Wenn die Anwendung mit dem _UNICODE #define kompiliert wird, zuordnen die ODBC-Headerdatei nicht zugeordnete Funktionsaufrufe (SQLDriver Verbinden) der Unicode-Version (SQLDriver Verbinden W.)

Der Treiber-Manager erkennt einen Treiber als Unicode-Treiber, wenn SQL Verbinden W vom Treiber unterstützt wird.

Wenn der Treiber ein Unicode-Treiber ist, führt der Treiber-Manager Funktionsaufrufe wie folgt aus:

  • Übergibt eine Funktion ohne Zeichenfolgenargumente oder Parameter direkt an den Treiber.

  • Übergibt Unicode-Funktionen (mit dem W-Suffix ) direkt an den Treiber.

  • Konvertiert eine ANSI-Funktion (mit dem Suffix A ) in eine Unicode-Funktion (mit dem W-Suffix ), indem die Zeichenfolgenargumente in Unicode-Zeichen konvertiert und die Unicode-Funktion an den Treiber übergeben wird.

Wenn der Treiber ein ANSI-Treiber ist, führt der Treiber-Manager Funktionsaufrufe wie folgt aus:

  • Übergibt Funktionen ohne Zeichenfolgenargumente oder Parameter direkt an den Treiber.

  • Konvertiert Unicode-Funktionen (mit dem W-Suffix ) in einen ANSI-Funktionsaufruf und übergibt sie an den Treiber.

  • Übergibt eine ANSI-Funktion direkt an den Treiber.

Der Treiber-Manager ist intern unicodefähig. Daher wird die optimale Leistung durch eine Unicode-Anwendung erzielt, die mit einem Unicode-Treiber arbeitet, da der Treiber-Manager unicode-Funktionen einfach an den Treiber übergibt. Wenn eine ANSI-Anwendung mit einem ANSI-Treiber arbeitet, muss der Treiber-Manager Zeichenfolgen von ANSI in Unicode konvertieren, wenn einige Funktionen wie SQLDriver Verbinden verarbeitet werden. Nach der Verarbeitung der Funktion muss der Treiber-Manager die Unicode-Zeichenfolge dann wieder in ANSI konvertieren, bevor die Funktion an den ANSI-Treiber gesendet wird.

Eine Anwendung sollte die gebundenen Parameterpuffer nicht ändern oder lesen, wenn der Treiber SQL_STILL_EXECUTING oder SQL_NEED_DATA zurückgibt. Der Treiber-Manager lässt die Puffer an ANSI gebunden, bis der Treiber SQL_SUCCESS, SQL_SUCCESS_WITH_INFO oder SQL_ERROR zurückgibt. Eine Multithread-Anwendung sollte keinen Zugriff auf gebundene Parameterwerte erhalten, für die ein anderer Thread eine SQL-Anweisung ausführt. Der Treiber-Manager konvertiert die Daten von Unicode in ANSI "in situ", und der andere Thread sieht möglicherweise ANSI-Daten in diesen Puffern, während der Treiber die SQL-Anweisung noch verarbeitet. Anwendungen, die Unicode-Daten an einen ANSI-Treiber binden, dürfen nicht zwei unterschiedliche Spalten an dieselbe Adresse binden.