Converter dados de SQL para tipos de dados do C

Quando um aplicativo chama SQLFetch, SQLFetchScroll ou SQLGetData, o driver recupera os dados da fonte de dados. Se necessário, ele converte os dados do tipo de dados no qual o driver os recuperou para o tipo de dados especificado pelo argumento TargetType em SQLBindCol ou SQLGetData. Finalmente, ele armazena os dados no local apontado pelo argumento TargetValuePtr em SQLBindCol ou SQLGetData (e o campo SQL_DESC_DATA_PTR da ARD).

A tabela a seguir mostra as conversões com suporte de tipos de dados ODBC SQL para tipos de dados ODBC C. Um círculo preenchido indica a conversão padrão para um tipo de dados SQL (o tipo de dados C para o qual os dados serão convertidos quando o valor de TargetType for SQL_C_DEFAULT). Um círculo oco indica uma conversão suportada.

Para um aplicativo ODBC 3.x que trabalha com um driver ODBC 2.x , a conversão de tipos de dados específicos do driver pode não ser suportada.

O formato dos dados convertidos não é afetado pela configuração de país/região do Windows.

As tabelas nas seções a seguir descrevem como o driver ou a fonte de dados converte dados recuperados da fonte de dados; drivers são necessários para oferecer suporte a conversões para todos os tipos de dados ODBC C dos tipos de dados ODBC SQL que eles suportam. Para um determinado tipo de dados ODBC SQL, a primeira coluna da tabela lista os valores de entrada legais do argumento TargetType em SQLBindCol e SQLGetData. A segunda coluna lista os resultados de um teste, geralmente usando o argumento BufferLength especificado em SQLBindCol ou SQLGetData, que o driver executa para determinar se ele pode converter os dados. Para cada resultado, a terceira e a quarta colunas listam os valores colocados nos buffers especificados pelo TargetValuePtr e StrLen_or_IndPtr argumentos especificados em SQLBindCol ou SQLGetData após o driver ter tentado converter os dados. (O StrLen_or_IndPtr argumento corresponde ao campo SQL_DESC_OCTET_LENGTH_PTR da ARD.) A última coluna lista o SQLSTATE retornado para cada resultado por SQLFetch, SQLFetchScroll ou SQLGetData.

Se o argumento TargetType em SQLBindCol ou SQLGetData contiver um identificador para um tipo de dados ODBC C não mostrado na tabela para um determinado tipo de dados ODBC SQL, SQLFetch, SQLFetchScroll ou SQLGetData retornará SQLSTATE 07006 (violação de atributo de tipo de dados restrito). Se o argumento TargetType contiver um identificador que especifique uma conversão de um tipo de dados SQL específico do driver para um tipo de dados ODBC C e essa conversão não for suportada pelo driver, SQLFetch, SQLFetchScroll ou SQLGetData retornará SQLSTATE HYC00 (recurso opcional não implementado).

Embora não seja mostrado nas tabelas, o driver retorna SQL_NULL_DATA no buffer especificado pelo argumento StrLen_or_IndPtr quando o valor de dados SQL é NULL. Para obter uma explicação do uso de StrLen_or_IndPtr quando várias chamadas são feitas para recuperar dados, consulte a descrição da função SQLGetData . Quando os dados SQL são convertidos em dados de caractere C, a contagem de caracteres retornada em *StrLen_or_IndPtr não inclui o byte de terminação nula. Se TargetValuePtr for um ponteiro nulo, SQLGetData retornará SQLSTATE HY009 (uso inválido de ponteiro nulo); em SQLBindCol, isso desvincula a coluna.

Os seguintes termos e convenções são usados nas tabelas:

  • Comprimento de byte de dados é o número de bytes de dados C disponíveis para retornar em *TargetValuePtr, se os dados serão truncados ou não antes de serem retornados ao aplicativo. Para dados de cadeia de caracteres, isso não inclui o espaço para o caractere de terminação nula.

  • O comprimento do byte de caractere é o número total de bytes necessários para exibir os dados no formato de caractere. Isso é definido para cada tipo de dados C na seção Tamanho de Exibição, exceto que o comprimento do byte de caractere está em bytes enquanto o tamanho de exibição está em caracteres.

  • As palavras em itálico representam argumentos de função ou elementos da gramática SQL. Para obter a sintaxe dos elementos gramaticais, consulte o Apêndice C: Gramática SQL.

Esta seção contém os tópicos a seguir.