Tipos de dados do C em ODBC
ODBC define os tipos de dados C que são usados por variáveis de aplicativo e seus identificadores de tipo correspondentes. Eles são usados pelos buffers vinculados a colunas de conjunto de resultados e parâmetros de instrução. Por exemplo, suponha que um aplicativo queira recuperar dados de uma coluna de conjunto de resultados no formato de caractere. Ele declara uma variável com o tipo de dados SQLCHAR * e vincula essa variável à coluna do conjunto de resultados com um identificador de tipo de SQL_C_CHAR. Para obter uma lista completa de tipos de dados C e identificadores de tipo, consulte o Apêndice D: Tipos de dados.
O ODBC também define um mapeamento padrão de cada tipo de dados SQL para um tipo de dados C. Por exemplo, um inteiro de 2 bytes na fonte de dados é mapeado para um inteiro de 2 bytes no aplicativo. Para usar o mapeamento padrão, um aplicativo especifica o identificador de tipo SQL_C_DEFAULT. No entanto, o uso desse identificador é desencorajado por razões de interoperabilidade.
Todos os tipos de dados inteiros C definidos no ODBC 1.x foram assinados. Tipos de dados C não assinados e seus identificadores de tipo correspondentes foram adicionados no ODBC 2.0. Por causa disso, aplicativos e drivers precisam ser particularmente cuidadosos ao lidar com versões 1.x.
Extensibilidade do tipo de dados C
No ODBC 3.8, você pode especificar tipos de dados C específicos do driver. Isso permite que você vincule um tipo SQL como um tipo C específico do driver em aplicativos ODBC quando você chama SQLBindCol, SQLGetData, ou SQLBindParameter. Isso pode ser útil para oferecer suporte a novos tipos de servidor, porque os tipos de dados C existentes podem não representar corretamente os novos tipos de dados de servidor. O uso de tipos C específicos do driver pode aumentar o número de conversões que os drivers podem executar.
Por exemplo, suponha que um sistema de gerenciamento de banco de dados (DBMS) introduziu um novo tipo SQL, DATETIMEOFFSET, para representar a data e a hora com informações de fuso horário. Não haveria nenhum tipo C específico no ODBC que correspondesse a DATETIMEOFFSET. Um aplicativo teria que vincular DATETIMEOFFSET como SQL_C_BINARY e convertê-lo em um tipo de dados definido pelo usuário. A partir do ODBC 3.8 com extensibilidade de tipo de dados C, um driver pode definir um novo tipo C correspondente. Por exemplo, para o novo tipo SQL DATETIMEOFFSET, o driver pode definir um novo tipo C correspondente, como SQL_C_DATETIMEOFFSET. Em seguida, um aplicativo pode vincular o novo tipo SQL como um tipo C específico do driver.
Um tipo de dados C é definido no driver da seguinte maneira:
O nível de conformidade ODBC para um aplicativo, driver ODBC e Gerenciador de Driver é 3.8 (ou superior).
O intervalo de dados de um tipo C específico do driver está entre 0x4000 e 0x7FFF.
O driver define a estrutura dos dados correspondentes ao tipo C. Isso pode ser feito no SDK específico do driver.
O gestor de drivers não validará um tipo C definido na faixa de 0x4000 e 0x7FFF; O driver executará a validação e qualquer conversão de tipo de dados. Mas se o intervalo de dados de um tipo C passado para o gerenciador de drivers estiver entre 0x0000 e 0x3FFF ou entre 0x8000 e 0xFFFF, o gerenciador de drivers validará o tipo de dados C.
Observação
Os tipos de dados C específicos do driver devem ser descritos na documentação do driver.
Para especificar um nível de conformidade ODBC de 3.8, um aplicativo chama SQLSetEnvAttr com o atributo SQL_ATTR_ODBC_VERSION definido como SQL_OV_ODBC3_80. Para determinar a versão do driver, um aplicativo chama SQLGetInfo com SQL_DRIVER_ODBC_VER.
Para obter mais informações sobre recursos do ODBC 3.8, veja Novidades no ODBC 3.8.