Partilhar via


Tipos de dados C

Os tipos de dados ODBC C indicam o tipo de dados de buffers C usados para armazenar dados no aplicativo.

Todos os drivers devem suportar todos os tipos de dados C. Isso é necessário porque todos os drivers devem oferecer suporte a todos os tipos C para os quais os tipos SQL que eles suportam podem ser convertidos, e todos os drivers suportam pelo menos um tipo de caractere SQL. Como o tipo de caractere SQL pode ser convertido de e para todos os tipos C, todos os drivers devem suportar todos os tipos C.

O tipo de dados C é especificado no SQLBindCol e funções SQLGetData com o argumento TargetType e no função SQLBindParameter com o argumento ValueType. Ele também pode ser especificado chamando SQLSetDescField para definir o campo SQL_DESC_CONCISE_TYPE de um ARD ou APD, ou chamando SQLSetDescRec com o argumento Type (e o argumento SubType, se necessário) e o DescriptorHandle argumento definido como o identificador de um ARD ou APD.

As tabelas a seguir listam identificadores de tipo válidos para os tipos de dados C. A tabela também lista o tipo de dados ODBC C que corresponde a cada identificador e a definição desse tipo de dados.

Identificador do tipo C ODBC C typedef Tipo C
SQL_C_CHAR SQLCHAR * char não assinado *
SQL_C_WCHAR SQLWCHAR * wchar_t *
SQL_C_SSHORT[j] SQLSMALLINT int curto
SQL_C_USHORT[j] SQLUSMALLINT int curto não assinado
SQL_C_SLONG[j] SQLINTEGER longo int
SQL_C_ULONG[j] SQLUINTEGER Int longo não assinado
SQL_C_FLOAT SQLREAL flutuar
SQL_C_DOUBLE SQLDOUBLE, SQLFLOAT duplo
SQL_C_BIT SQLCHAR char não assinado
SQL_C_STINYINT[j] SQLSCHAR char assinado
SQL_C_UTINYINT[j] SQLCHAR char não assinado
SQL_C_SBIGINT SQLBIGINT _int64[h]
SQL_C_UBIGINT SQLUBIGINT _int64 não assinado[h]
SQL_C_BINARY SQLCHAR * char não assinado *
SQL_C_BOOKMARK[i] INDICADOR não assinado longo int[d]
SQL_C_VARBOOKMARK SQLCHAR * char não assinado *
Todos os tipos de dados de intervalo C SQL_INTERVAL_STRUCT Consulte a seção Estrutura do Intervalo C do , mais adiante neste apêndice.

Identificador de tipo C SQL_C_TYPE_DATE[c]

ODBC C typedef SQL_DATE_STRUCT

tipo C

struct tagDATE_STRUCT {  
   SQLSMALLINT year;  
   SQLUSMALLINT month;  
   SQLUSMALLINT day;    
} DATE_STRUCT;[a]  

Identificador de tipo C SQL_C_TYPE_TIME[c]

ODBC C typedef SQL_TIME_STRUCT

tipo C

struct tagTIME_STRUCT {  
   SQLUSMALLINT hour;  
   SQLUSMALLINT minute;  
   SQLUSMALLINT second;  
} TIME_STRUCT;[a]  

Identificador de tipo C SQL_C_TYPE_TIMESTAMP[c]

ODBC C typedef SQL_TIMESTAMP_STRUCT

tipo C

struct tagTIMESTAMP_STRUCT {  
   SQLSMALLINT year;  
   SQLUSMALLINT month;  
   SQLUSMALLINT day;  
   SQLUSMALLINT hour;  
   SQLUSMALLINT minute;  
   SQLUSMALLINT second;  
   SQLUINTEGER fraction;[b]   
} TIMESTAMP_STRUCT;[a]  

identificador de tipo C SQL_C_NUMERIC

ODBC C typedef SQL_NUMERIC_STRUCT

tipo C

struct tagSQL_NUMERIC_STRUCT {  
   SQLCHAR precision;  
   SQLSCHAR scale;  
   SQLCHAR sign[g];  
   SQLCHAR val[SQL_MAX_NUMERIC_LEN];[e], [f]   
} SQL_NUMERIC_STRUCT;  

identificador de tipo C SQL_C_GUID

ODBC C typedef SQLGUID

tipo C

struct tagSQLGUID {  
   DWORD Data1;  
   WORD Data2;  
   WORD Data3;  
   BYTE Data4[8];  
} SQLGUID;[k]  

[a] Os valores dos campos ano, mês, dia, hora, minuto e segundo nos tipos de dados datetime C devem estar de acordo com as restrições do calendário gregoriano. (Ver Restrições do Calendário Gregoriano mais adiante neste apêndice.)

[b] O valor do campo de fração é o número de bilionésimos de segundo e varia de 0 a 999.999.999 (1 menos de 1 bilhão). Por exemplo, o valor do campo de fração para meio segundo é 500.000.000, para um milésimo de segundo (um milissegundo) é 1.000.000, para um milionésimo de segundo (um microssegundo) é 1.000, e para um bilionésimo de segundo (um nanossegundo) é 1.

[c] No ODBC 2.x, os tipos de dados de data, hora e carimbo de data/hora C são SQL_C_DATE, SQL_C_TIME e SQL_C_TIMESTAMP.

[d] Os aplicativos ODBC 3*.x* devem usar SQL_C_VARBOOKMARK, não SQL_C_BOOKMARK. Quando um aplicativo ODBC 3*.x* funciona com um ODBC 2.x driver, o Gerenciador de Driver ODBC 3*.x* mapeará SQL_C_VARBOOKMARK para SQL_C_BOOKMARK.

[e] Um número é armazenado no campo val da estrutura SQL_NUMERIC_STRUCT como um inteiro dimensionado, no modo little endian (sendo o byte mais à esquerda o byte menos significativo). Por exemplo, o número 10.001 base 10, com uma escala de 4, é dimensionado para um inteiro de 100010. Como este é 186AA em formato hexadecimal, o valor em SQL_NUMERIC_STRUCT seria "AA 86 01 00 00 ... 00", com o número de bytes definido pelo SQL_MAX_NUMERIC_LEN #define.

Para obter mais informações sobre SQL_NUMERIC_STRUCT, consulte COMO: Recuperando dados numéricos com SQL_NUMERIC_STRUCT.

[f] Os campos de precisão e escala do tipo de dados SQL_C_NUMERIC são utilizados para a entrada de uma aplicação e para a saída do condutor para a aplicação. Quando o driver grava um valor numérico no SQL_NUMERIC_STRUCT, ele usará seu próprio padrão específico do driver como o valor para o campo de precisão e usará o valor no campo SQL_DESC_SCALE do descritor do aplicativo (que assume como padrão 0) para o campo escala . Um aplicativo pode fornecer seus próprios valores de precisão e escala definindo os campos SQL_DESC_PRECISION e SQL_DESC_SCALE do descritor do aplicativo.

[g] O campo de sinal é 1 se positivo, 0 se negativo.

[h] _int64 pode não ser fornecido por alguns compiladores.

[i] _SQL_C_BOOKMARK foi preterido no ODBC 3*.x*.

[j] _SQL_C_SHORT, SQL_C_LONG e SQL_C_TINYINT foram substituídos no ODBC por tipos assinados e não assinados: SQL_C_SSHORT e SQL_C_USHORT, SQL_C_SLONG e SQL_C_ULONG, e SQL_C_STINYINT e SQL_C_UTINYINT. Um driver ODBC 3*.x* que deve funcionar com ODBC 2.x aplicativos devem suportar SQL_C_SHORT, SQL_C_LONG e SQL_C_TINYINT, porque quando eles são chamados, o Gerenciador de Driver os passa para o driver.

[k] SQL_C_GUID só pode ser convertido em SQL_CHAR ou SQL_WCHAR.

Esta seção contém o seguinte tópico.

Ver também

Tipos de dados C no ODBC