Compartilhar via


Mapeamento de função no Gerenciador de Driver

O gerenciador de driver dá suporte a dois pontos de entrada para funções que usam argumentos de cadeia de caracteres. A função não decorada (SQLDriverConnect) é a forma ANSI da função. A forma Unicode é decorada com um W (SQLDriverConnectW.)

O arquivo de cabeçalho ODBC também dá suporte a funções decoradas com um A, (SQLDriverConnectA) para a conveniência de aplicativos mistos ANSI/Unicode. As chamadas feitas para as funções A são, na verdade, chamadas para o ponto de entrada não decorado (SQLDriverConnect.)

Se o aplicativo for compilado com o _UNICODE #define, o arquivo de cabeçalho ODBC mapeará chamadas de função não decoradas (SQLDriverConnect) para a versão Unicode (SQLDriverConnectW).

O Gerenciador de Driver reconhece um driver como um driver Unicode se SQLConnectW é compatível com o driver.

Se o driver for um driver Unicode, o Gerenciador de Driver fará chamadas de função desta maneira:

  • Passa uma função sem argumentos de cadeia de caracteres ou parâmetros diretamente para o driver.

  • Passa funções Unicode (com o sufixo W) diretamente para o driver.

  • Converte uma função ANSI (com o sufixo A) em uma função Unicode (com o sufixo W) convertendo os argumentos de cadeia de caracteres em caracteres Unicode e passa a função Unicode para o driver.

Se o driver for um driver ANSI, o Gerenciador de Driver fará chamadas de função desta maneira:

  • Passa funções sem argumentos de cadeia de caracteres ou parâmetros diretamente para o driver.

  • Converte funções Unicode (com o sufixo W) em uma chamada de função ANSI e a passa para o driver.

  • Passa uma função ANSI diretamente para o driver.

O Gerenciador de Driver é habilitado para Unicode internamente. Como resultado, o desempenho ideal é obtido por um aplicativo Unicode trabalhando com um driver Unicode, pois o Gerenciador de Driver simplesmente passa funções Unicode para o driver. Quando um aplicativo ANSI está trabalhando com um driver ANSI, o Gerenciador de Driver deve converter cadeias de caracteres de ANSI em Unicode ao processar algumas funções, como SQLDriverConnect. Depois de processar a função, o Gerenciador de Driver deve converter a cadeia de caracteres Unicode de volta em ANSI antes de enviar a função para o driver ANSI.

Um aplicativo não deve modificar nem ler seus buffers de parâmetros vinculados quando o driver retorna SQL_STILL_EXECUTING ou SQL_NEED_DATA. O Gerenciador de Driver deixa os buffers associados ao ANSI até que o driver retorne SQL_SUCCESS, SQL_SUCCESS_WITH_INFO ou SQL_ERROR. Um aplicativo com multithread não deve obter acesso a nenhum valor de parâmetro acoplado no qual outro thread esteja executando uma instrução SQL. O Gerenciador de Driver converte os dados de Unicode em ANSI "no lugar", e o outro thread pode ver os dados ANSI nesses buffers enquanto o driver ainda está processando a instrução SQL. Os aplicativos que associam dados Unicode a um driver ANSI não devem associar duas colunas diferentes ao mesmo endereço.