ドライバー マネージャーの関数マッピング
ドライバー マネージャーは、文字列引数を受け取る関数の 2 つのエントリ ポイントをサポートしています。 非コーディング関数 (SQLDriverConnect) は、関数の ANSI 形式です。 Unicode 形式は W (SQLDriverConnectW) で修飾されます。
ODBC ヘッダー ファイルでは、混在する ANSI/Unicode アプリケーションの利便性のために、A(SQLDriverConnectA) で修飾された関数もサポートされています。 A 関数に対して行われた呼び出しは、実際には未修飾のエントリ ポイント (SQLDriverConnect) への呼び出しです。
アプリケーションが _UNICODE #define でコンパイルされている場合、ODBC ヘッダー ファイルは、未修飾の関数呼び出し (SQLDriverConnect) を Unicode バージョン (SQLDriverConnectW) にマップします。
ドライバー マネージャーは、ドライバーで SQLConnectW がサポートされている場合、Unicode ドライバーとしてドライバーを認識します。
ドライバーが Unicode ドライバーの場合、ドライバー マネージャーは次のように関数呼び出しを行います。
文字列引数またはパラメーターを含まない関数をドライバーに直接渡します。
Unicode 関数 (W サフィックス付き) をドライバーに直接渡します。
文字列引数を Unicode 文字に変換し、Unicode 関数をドライバーに渡すことで、ANSI 関数 (A サフィックス付き ) を Unicode 関数 (W サフィックス付き) に変換します。
ドライバーが ANSI ドライバーの場合、ドライバー マネージャーは次のように関数呼び出しを行います。
文字列引数またはパラメーターを持たない関数をドライバーに直接渡します。
Unicode 関数 (W サフィックス付き) を ANSI 関数呼び出しに変換し、ドライバーに渡します。
ANSI 関数をドライバーに直接渡します。
ドライバー マネージャーは内部的に Unicode 対応です。 その結果、最適なパフォーマンスは、Unicode ドライバーを操作する Unicode アプリケーションによって取得されます。ドライバー マネージャーは単に Unicode 関数をドライバーに渡すからです。 ANSI アプリケーションが ANSI ドライバーを操作している場合、ドライバー マネージャーは、SQLDriverConnect などの一部の関数を処理するときに、文字列を ANSI から Unicode に変換する必要があります。 関数を処理した後、ドライバー マネージャーは、ANSI ドライバーに関数を送信する前に、Unicode 文字列を ANSI に変換する必要があります。
ドライバーが SQL_STILL_EXECUTING または SQL_NEED_DATA を返すとき、アプリケーションはバインドされたパラメーター バッファーを変更したり読み取ったりしないでください。 ドライバー マネージャーは、ドライバーが SQL_SUCCESS、 SQL_SUCCESS_WITH_INFO、または SQL_ERROR を返すまで、ANSI にバインドされたバッファーを残します。 マルチスレッド アプリケーションは、別のスレッドが SQL ステートメントを実行しているバインドされたパラメーター値にアクセスすることはできません。 ドライバー マネージャーは、データを Unicode から ANSI に "インプレース" に変換します。ドライバーが SQL ステートメントを処理している間に、他のスレッドでこれらのバッファーに ANSI データが表示される場合があります。 Unicode データを ANSI ドライバーにバインドするアプリケーションでは、2 つの異なる列を同じアドレスにバインドしないでください。