Partilhar via


Atualizando um driver 3.5 para um driver 3.8

Este tópico fornece orientações e considerações para atualizar um driver ODBC 3.5 para um driver ODBC 3.8.

Números de Versão

As seguintes diretrizes referem-se aos números de versão:

  • Um driver deve suportar SQL_OV_ODBC3_80 para SQL_ATTR_ODBC_VERSION, devolvendo SQL_ERROR para valores diferentes de SQL_OV_ODBC2, SQL_OV_ODBC3 e SQL_OV_ODBC3_80. As versões futuras do Gestor de Drivers assumirão que um driver suporta um nível de conformidade ODBC se o driver devolver SQL_SUCCESS da Função SQLSetEnvAttr.

  • Um driver da versão 3.8 deve devolver 03.80 do SQLGetInfo quando SQL_DRIVER_ODBC_VER for passado para InfoType. No entanto, os gestores de drivers mais antigos, que estavam incluídos em versões anteriores do Microsoft Windows, tratam o driver como um driver da versão 3.5 e emitem um aviso.

    No Windows 7, a versão do Driver Manager é a 03.80. No Windows 8, a versão do Driver Manager é 03.81 através do SQL_DM_VER SQLGetInfo (parâmetro InfoType ). SQL_ODBC_VER reporta a versão como 03.80 tanto no Windows 7 como no Windows 8.

Driver-Specific Tipos de Dados C

Um driver pode ter tipos de dados C personalizados quando funciona com uma aplicação ODBC versão 3.8. (Para mais informações, veja Tipos de Dados C no ODBC.) No entanto, não é necessário que um driver 3.8 implemente tipos C específicos de cada driver. Mas o driver deve ainda assim realizar a verificação de alcance dos tipos C; o Driver Manager não faz isso para drivers 3.8. Para facilitar o desenvolvimento do driver, o valor do tipo de dado C específico do driver pode ser definido no seguinte formato:

SQL_DRIVER_C_TYPE_BASE+0, SQL_DRIVER_C_TYPE_BASE+1  
Tipos de dados específicos do driver, tipos de descritor, tipos de informação, tipos de diagnóstico e atributos

Ao desenvolver um novo driver, deve usar o intervalo específico do driver para tipos de dados, tipos de descritores, tipos de informação, tipos de diagnóstico e atributos. Os intervalos específicos do driver e os seus valores base de tipo são discutidos em Tipos de Dados Específicos do Driver, Tipos de Descritores, Tipos de Informação, Tipos de Diagnóstico e Atributos.

Agrupamento de Conexões

Para uma melhor gestão do pooling de ligações, o ODBC 3.8 introduz o atributo de ligação SQL_ATTR_RESET_CONNECTION no SQLSetConnectAttr. SQL_RESET_CONNECTION_YES é o único valor válido para este atributo. SQL_ATTR_RESET_CONNECTION será definido pouco antes do Gestor de Controladores colocar uma ligação no pool de ligações, permitindo que o driver restaure os outros atributos de ligação para os seus valores predefinidos.

Para evitar comunicações desnecessárias com o servidor, um driver pode adiar o reset do atributo de ligação até à próxima comunicação com o servidor remoto, após a reutilização da ligação do pool.

Note que SQL_ATTR_RESET_CONNECTION é usado apenas na comunicação entre o Gestor de Condutores e um motorista. Uma aplicação não pode definir este atributo diretamente. Todos os drivers da versão 3.8 devem implementar este atributo de ligação.

Parâmetros de Saída Transmitidos

A versão 3.8 do ODBC introduz parâmetros de saída em streaming, uma forma mais escalável de recuperar parâmetros de saída. (Para mais informações, consulte Recuperação de Parâmetros de Saída Usando SQLGetData.) Para suportar esta funcionalidade, um driver deve definir SQL_GD_OUTPUT_PARAMS no valor de retorno quando SQL_GETDATA_EXTENSIONS for o InfoType numa chamada SQLGetInfo. O suporte para um tipo SQL com parâmetros de saída em fluxo deve ser implementado no driver. O Gestor de Drivers não gera erro para um tipo SQL inválido. Os tipos SQL que suportam parâmetros de saída em streaming são definidos no driver.

Um driver deve devolver SQL_ERROR se a aplicação usou SQLGetData para recuperar um parâmetro que não é o mesmo do parâmetro devolvido pelo SQLParamData.

Execução Assíncrona para Operações de Ligação (Método de Sondagem)

Um driver pode ativar suporte assíncrono para várias operações de ligação.

A partir do Windows 7, o ODBC suporta o método de sondagem (para mais informações, veja Execução Assíncrona (Método de Polling)). Não é necessário que um driver ODBC da versão 3.8 implemente operações assíncronas nos handles de ligação. Mesmo que um driver não implemente operações assíncronas nos manipuladores de conexão, deve ainda assim implementar o SQL_ASYNC_DBC_FUNCTIONS InfoType e devolver SQL_ASYNC_DBC_NOT_CAPABLE.

Quando as operações de ligação assíncronas estão ativadas, o tempo de execução de uma operação de ligação é o tempo total de todas as chamadas repetidas. Se a última chamada repetida ocorrer depois de o tempo total ter excedido o valor definido pelo atributo de ligação SQL_ATTR_CONNECTION_TIMEOUT e a operação não ter terminado, o driver devolve SQL_ERROR e regista um registo de diagnóstico com SQLState HYT01 e a mensagem "Connection timeout expired". Não há timeout se a operação tiver terminado.

Função SQLCancelHandle

O ODBC 3.8 suporta a Função SQLCancelHandle, que é usada para cancelar tanto operações de ligação como de instruções. Um driver que suporte SQLCancelHandle deve exportar a função. Um driver não deve cancelar qualquer função de ligação síncrona ou assíncrona que esteja em curso num handle de instrução se a aplicação chamar SQLCancel ou SQLCancelHandle. De forma semelhante, um driver não deve cancelar qualquer função de instrução síncrona ou assíncrona que esteja em curso se uma aplicação chamar SQLCancelHandle no handler da ligação. Além disso, um driver não deve cancelar a operação de navegação (SQLBrowseConnect retorna SQL_NEED_DATA) se a aplicação chamar SQLCancelHandle no handle de ligação. Nestes casos, um driver deve devolver HY010, "erro de sequência de funções" ("function sequence error").

Não é necessário suportar ao mesmo tempo SQLCancelHandle e operações de ligação assíncronas. Um driver pode suportar operações de ligação assíncronas, mas não SQLCancelHandle, ou vice-versa.

Ligações Suspensas

O ODBC 3.8 Driver Manager pode colocar uma ligação em estado suspenso. Uma aplicação irá chamar o SQLDisconnect para libertar recursos associados à ligação. Neste caso, o driver deve tentar libertar o máximo de recursos possível sem verificar o estado da ligação. Para mais informações sobre o estado suspenso, consulte Função SQLEndTran.

Driver-Aware Pool de conexões

O ODBC no Windows 8 permite que os drivers personalizem o comportamento do pool de ligações. Para mais informações, consulte Driver-Aware Pooling de Ligações.

Execução assíncrona (método de notificação)

O ODBC 3.8 suporta o método de notificação para operações assíncronas, disponível a partir do Windows 8. Para mais informações, consulte Execução Assíncrona (Método de Notificação).

Ver também

Desenvolvimento de um Driver ODBC
Drivers ODBC Fornecidos pela Microsoft
Novidades no ODBC 3.8