Funktionszuordnung im Treiber-Manager
Der Treiber-Manager unterstützt zwei Einstiegspunkte für Funktionen, die Zeichenfolgenargumente annehmen. Die nicht verbuchte Funktion (SQLDriverConnect) ist die ANSI-Form der Funktion. Das Unicode-Formular ist mit einem W (SQLDriverConnectW) versehen.
Die ODBC-Headerdatei unterstützt auch Funktionen, die mit einer A, (SQLDriverConnectA) versehen sind, um gemischte ANSI-/Unicode-Anwendungen zu nutzen. Aufrufe an die A-Funktionen werden tatsächlich in den nicht bewerteten Einstiegspunkt (SQLDriverConnect) aufgerufen.)
Wenn die Anwendung mit dem _UNICODE #define kompiliert wird, zuordnen die ODBC-Headerdatei nicht zugeordnete Funktionsaufrufe (SQLDriverConnect) der Unicode-Version (SQLDriverConnectW).)
Der Treiber-Manager erkennt einen Treiber als Unicode-Treiber, wenn SQLConnectW 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 SQLDriverConnect 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.