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


Сопоставление функции в диспетчере драйверов

Диспетчер драйверов поддерживает две точки входа для функций, которые принимают строковые аргументы. Неоцененные функции (SQLDriverConnect) — это форма ANSI функции. Форма Юникода украшена W (SQLDriverConnectW.)

Файл заголовка ODBC также поддерживает функции, украшенные A, (SQLDriverConnectA) для удобства смешанных приложений ANSI/Юникод. Вызовы функций A фактически вызываются в неоценённую точку входа (SQLDriverConnect).)

Если приложение компилируется с _UNICODE #define, файл заголовка ODBC сопоставляет неоцененные вызовы функций (SQLDriverConnect) с версией Юникода (SQLDriverConnectW.)

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

Если драйвер является драйвером Юникода, диспетчер драйверов вызывает функцию следующим образом:

  • Передает функцию без строковых аргументов или параметров непосредственно в драйвер.

  • Передает функции Юникода (с суффиксом W ) непосредственно через драйвер.

  • Преобразует функцию ANSI (с суффиксом A ) в функцию Юникода (с суффиксом W ), преобразовав строковые аргументы в символы Юникода и передает функцию Юникод драйверу.

Если драйвер является драйвером ANSI, диспетчер драйверов выполняет вызовы функций следующим образом:

  • Передает функции без строковых аргументов или параметров непосредственно в драйвер.

  • Преобразует функции Юникода (с суффиксом W ) в вызов функции ANSI и передает его драйверу.

  • Передает функцию ANSI непосредственно драйверу.

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

Приложение не должно изменять или считывать буферы связанных параметров, когда драйвер возвращает SQL_STILL_EXECUTING или SQL_NEED_DATA. Диспетчер драйверов оставляет буферы привязанными к ANSI, пока драйвер не возвращает SQL_SUCCESS, SQL_SUCCESS_WITH_INFO или SQL_ERROR. Многопоточное приложение не должно получать доступ к каким-либо связанным значениям параметров, в котором выполняется другая цепочка инструкции SQL. Диспетчер драйверов преобразует данные из Юникода в ANSI "на месте", а другой поток может видеть данные ANSI в этих буферах, пока драйвер по-прежнему обрабатывает инструкцию SQL. Приложения, которые привязывают данные Юникода к драйверу ANSI, не должны привязать два разных столбца к одному адресу.