Поделиться через


Драйверы Юникода

Должен ли драйвер быть драйвером Юникода или драйвером ANSI, полностью зависит от характера источника данных. Если источник данных поддерживает данные Юникода, драйвер должен быть драйвером Юникода. Если источник данных поддерживает только данные ANSI, драйвер должен оставаться драйвером ANSI.

Драйвер Юникод должен экспортировать SQLConnectW, чтобы он был признан диспетчером драйверов как драйвер Юникод.

Драйвер Юникода должен принимать функции Юникода (с суффиксом W) и хранить данные Юникода. Он также может принимать функции ANSI, но это не обязательно. (Диспетчер драйверов не передает вызов функции ANSI с суффиксом A драйверу, но преобразует его в вызов функции ANSI без суффикса, а затем передает его драйверу.)

Драйвер Юникода должен иметь возможность возвращать результирующие наборы в Юникоде или ANSI в зависимости от привязки приложения. Если приложение привязывается к SQL_C_CHAR, драйвер Юникода должен преобразовать данные SQL_WCHAR в SQL_CHAR. Диспетчер драйверов сопоставляет SQL_C_WCHAR с SQL_C_CHAR для драйверов ANSI, но не сопоставляет драйверы Юникода.

Замечание

При определении типа драйвера диспетчер драйверов вызовет SQLSetConnectAttr и задает атрибут SQL_ATTR_ANSI_APP во время подключения. Если приложение использует API ANSI, SQL_ATTR_ANSI_APP будет задано значение SQL_AA_TRUE, а если используется Юникод, оно будет иметь значение SQL_AA_FALSE. Этот атрибут используется для того, чтобы драйвер может проявлять различные действия в зависимости от типа приложения. Атрибут не может быть задан приложением напрямую, и он не поддерживается SQLGetConnectAttr. Если драйвер демонстрирует одинаковое поведение для приложений ANSI и Юникода, он должен возвращать SQL_ERROR для этого атрибута. Если драйвер возвращает SQL_SUCCESS, диспетчер драйверов отделит подключения ANSI и Юникод при использовании пула подключений.