드라이버 관리자의 함수 매핑
드라이버 관리자는 문자열 인수를 사용하는 함수에 대해 두 개의 진입점을 지원합니다. 인코레이트되지 않은 함수(SQLDriverConnect)는 함수의 ANSI 형식입니다. 유니코드 양식은 W(SQLDriverConnectW)로 데코레이팅됩니다.
또한 ODBC 헤더 파일은 혼합 ANSI/유니코드 애플리케이션의 편의를 위해 A(SQLDriverConnectA)로 데코레이팅된 함수를 지원합니다. A 함수에 대한 호출은 실제로 장식되지 않은 진입점(SQLDriverConnect)에 대한 호출입니다.
애플리케이션이 _UNICODE #define 사용하여 컴파일되는 경우 ODBC 헤더 파일은 디코딩되지 않은 함수 호출(SQLDriverConnect)을 유니코드 버전(SQLDriverConnectW)에 매핑합니다.
드라이버에서 SQLConnectW를 지원하는 경우 드라이버 관리자는 드라이버를 유니코드 드라이버로 인식합니다.
드라이버가 유니코드 드라이버인 경우 드라이버 관리자는 다음과 같이 함수를 호출합니다.
문자열 인수 또는 매개 변수가 없는 함수를 드라이버에 직접 전달합니다.
유니코드 함수( W 접미사 포함)를 드라이버에 직접 전달합니다.
문자열 인수를 유니코드 문자로 변환하여 ANSI 함수(A 접미사 포함)를 유니코드 함수( W 접미사 포함)로 변환하고 유니코드 함수를 드라이버에 전달합니다.
드라이버가 ANSI 드라이버인 경우 드라이버 관리자는 다음과 같이 함수를 호출합니다.
문자열 인수 또는 매개 변수가 없는 함수를 드라이버에 직접 전달합니다.
유니코드 함수( W 접미사 포함)를 ANSI 함수 호출로 변환하고 드라이버에 전달합니다.
ANSI 함수를 드라이버에 직접 전달합니다.
드라이버 관리자는 내부적으로 유니코드를 사용할 수 있습니다. 따라서 드라이버 관리자가 유니코드 함수를 드라이버에 전달하기 때문에 유니코드 드라이버로 작업하는 유니코드 애플리케이션에서 최적의 성능을 얻습니다. ANSI 애플리케이션이 ANSI 드라이버로 작업하는 경우 드라이버 관리자는 SQLDriverConnect와 같은 일부 함수를 처리할 때 문자열을 ANSI에서 유니코드로 변환해야 합니다. 함수를 처리한 후 드라이버 관리자는 ANSI 드라이버에 함수를 보내기 전에 유니코드 문자열을 ANSI로 다시 변환해야 합니다.
드라이버가 SQL_STILL_EXECUTING 또는 SQL_NEED_DATA 반환하는 경우 애플리케이션은 바인딩된 매개 변수 버퍼를 수정하거나 읽지 않아야 합니다. 드라이버 관리자는 드라이버가 SQL_SUCCESS, SQL_SUCCESS_WITH_INFO 또는 SQL_ERROR 반환할 때까지 버퍼를 ANSI에 바인딩된 둡니다. 다중 스레드 애플리케이션은 다른 스레드가 SQL 문을 실행하는 바인딩된 매개 변수 값에 액세스할 수 없습니다. 드라이버 관리자는 데이터를 유니코드에서 ANSI로 변환하고 다른 스레드는 드라이버가 SQL 문을 처리하는 동안 이러한 버퍼에 ANSI 데이터를 볼 수 있습니다. 유니코드 데이터를 ANSI 드라이버에 바인딩하는 애플리케이션은 두 개의 서로 다른 열을 동일한 주소에 바인딩하면 안 됩니다.