Partilhar via


Mapeamento de funções no Gestor de drivers

O gestor de drivers suporta dois pontos de entrada para funções que recebem argumentos de cadeia. A função não decorada (SQLDriverConnect) é a forma ANSI da função. A forma Unicode é decorada com um W (SQLDriverConnectW.)

O ficheiro de cabeçalho ODBC também suporta funções decoradas com um A (SQLDriverConnectA) para a conveniência de aplicações mistas ANSI/Unicode. As chamadas feitas às funções A são, na verdade, chamadas para o ponto de entrada não decorado (SQLDriverConnect).

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

O Gestor de Controladores reconhece um controlador como Unicode se SQLConnectW for suportado pelo controlador.

Se o driver for um controlador Unicode, o Gestor de Drivers faz chamadas de função da seguinte forma:

  • Passa uma função sem argumentos de string 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 ) numa função Unicode (com o sufixo W ) convertendo os argumentos da cadeia em caracteres Unicode e passa a função Unicode para o driver.

Se o driver for um driver ANSI, o Driver Manager faz chamadas de função da seguinte forma:

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

  • Converte as funções Unicode (com o sufixo W) numa chamada de função ANSI e passa-as para o driver.

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

O Gestor de Drivers é compatível internamente com Unicode. Como resultado, o desempenho ótimo é obtido por uma aplicação Unicode a trabalhar com um driver Unicode, porque o Gestor de Drivers simplesmente passa funções Unicode para o driver. Quando uma aplicação ANSI está a trabalhar com um driver ANSI, o Gestor de Controladores deve converter strings de ANSI para Unicode ao processar algumas funções, como SQLDriverConnect. Após processar a função, o Gestor de Drivers deve então converter a cadeia Unicode de volta para ANSI antes de enviar a função para o driver ANSI.

Uma aplicação não deve modificar nem ler os seus buffers de parâmetros limitados quando o driver devolve SQL_STILL_EXECUTING ou SQL_NEED_DATA. O Driver Manager deixa buffers vinculados ao ANSI até que o driver devolva SQL_SUCCESS, SQL_SUCCESS_WITH_INFO ou SQL_ERROR. Uma aplicação multithread não deve aceder a quaisquer valores de parâmetro limitados que outro thread esteja a executar uma instrução SQL. O Gestor de Controladores converte os dados de Unicode para ANSI no local, e a outra thread pode ver dados ANSI nesses buffers enquanto o driver ainda está a processar a instrução SQL. Aplicações que associam dados Unicode a um driver ANSI não devem associar duas colunas diferentes ao mesmo endereço.