Partilhar via


O Gestor de Condutores

O Gestor de Drivers é uma biblioteca que gere a comunicação entre aplicações e drivers. Por exemplo, nas plataformas Microsoft Windows, o Gestor de Drivers é uma biblioteca de ligação dinâmica (DLL) escrita pela Microsoft e que pode ser redistribuída pelos utilizadores do SDK redistribuível MDAC 2.8 SP1.

O Gestor de Drivers existe principalmente como uma conveniência para os criadores de aplicações e resolve vários problemas comuns a todas as aplicações. Estas incluem determinar qual o driver a carregar com base no nome de uma fonte de dados, carregar e descarregar drivers, e chamar funções nos drivers.

Para perceber porque é que isto último é um problema, considere o que aconteceria se a aplicação chamasse funções diretamente no driver. A menos que a aplicação estivesse ligada diretamente a um driver específico, teria de construir uma tabela de ponteiros para as funções desse driver e chamar essas funções por apontador. Usar o mesmo código para mais do que um driver ao mesmo tempo acrescentaria ainda mais um nível de complexidade. A aplicação teria primeiro de definir um ponteiro de função para apontar para a função correta no driver correto, e depois chamar a função através desse ponteiro.

O Driver Manager resolve este problema fornecendo um único local para chamar cada função. A aplicação está ligada ao Gestor de Drivers e chama funções ODBC no Gestor de Drivers, não no driver. A aplicação identifica o driver alvo e a fonte de dados através de uma alavanca de ligação. Quando carrega um driver, o Driver Manager constrói uma tabela de ponteiros para as funções desse driver. Utiliza o handle de ligação passado pela aplicação para encontrar o endereço da função no driver de destino e chama essa função por endereço.

Na maioria das vezes, o Gestor de Drivers limita-se a passar chamadas de funções da aplicação para o driver correto. No entanto, também implementa algumas funções (SQLDataSources, SQLDrivers e SQLGetFunctions) e realiza verificações básicas de erros. Por exemplo, o Driver Manager verifica se os handles não são apontadores nulos, se as funções são chamadas na ordem correta e se certos argumentos de função são válidos. Para uma descrição completa dos erros verificados pelo Driver Manager, consulte a secção de referência para cada função e o Apêndice B: Tabelas de Transição de Estado ODBC.

O último grande papel do Gestor de Condutores é carregar e descarregar os condutores. A aplicação carrega e descarrega apenas o Gestor de Drivers. Quando quer usar um driver específico, chama uma função de ligação (SQLConnect, SQLDriverConnect ou SQLBrowseConnect) no Gestor de Drivers e especifica o nome de uma fonte de dados ou driver específico, como "Accounting" ou "SQL Server." Usando este nome, o Gestor de Drivers pesquisa na informação da fonte de dados o nome do ficheiro do driver, como Sqlsrvr.dll. Depois carrega o driver (assumindo que ainda não está carregado), armazena o endereço de cada função no driver e chama a função de ligação no driver, que depois se inicializa e liga-se à fonte de dados.

Quando a aplicação termina de usar o driver, chama o SQLDisconnect no Driver Manager. O Gestor de Controladores chama esta função no controlador, que se desconecta da fonte de dados. No entanto, o Gestor de Drivers mantém o driver em memória caso a aplicação volte a ligar-se. Só descarrega o driver quando a aplicação liberta a ligação usada pelo driver ou utiliza a ligação para outro driver, e nenhuma outra ligação utiliza o driver. Para uma descrição completa do papel do Gestor de Condutores no carregamento e descarregamento de drivers, veja Papel do Gestor de Drivers no Processo de Ligação.