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. Por fim, ele armazena os dados no local apontado pelo argumento TargetValuePtr em SQLBindCol ou SQLGetData (e no campo SQL_DESC_DATA_PTR do 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 com suporte.
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 ter suporte.
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 os dados recuperados da fonte de dados; os drivers são necessários para dar 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 SQL ODBC, 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 depois que o driver tentou converter os dados. (O StrLen_or_IndPtr argumento corresponde ao campo SQL_DESC_OCTET_LENGTH_PTR do 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 especifica 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 tiver suporte do 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 sobre o 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 nulo. Se TargetValuePtr for um ponteiro nulo, SQLGetData retornará SQLSTATE HY009 (uso inválido de ponteiro nulo); em SQLBindCol, isso desassocia a coluna.
Os seguintes termos e convenções são usados nas tabelas:
O comprimento de bytes de dados é o número de bytes de dados C disponíveis para retornar em *TargetValuePtr, independentemente de os dados serem 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 caracteres é o número total de bytes necessários para exibir os dados no formato de caracteres. Isso é definido para cada tipo de dados C na seção Tamanho de exibição, exceto que o comprimento do byte de caracteres 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.