Tipos de dados C
Tipos de dados ODBC C indicam o tipo de dados de buffers C usados para armazenar dados no aplicativo.
Todos os drivers devem dar suporte a todos os tipos de dados C. Isso é necessário porque todos os drivers devem dar suporte a todos os tipos C aos quais os tipos de SQL compatíveis podem ser convertidos e todos os drivers dão suporte a pelo menos um tipo SQL de caractere. Como o tipo SQL de caractere pode ser convertido de e para todos os tipos C, todos os drivers devem dar suporte a todos os tipos C.
O tipo de dados C é especificado nas funções
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 à definição desse tipo de dados.
Identificador de tipo C | Typedef do ODBC C | Tipo C |
---|---|---|
SQL_C_CHAR | SQLCHAR * | unsigned char * |
SQL_C_WCHAR | SQLWCHAR * | wchar_t * |
SQL_C_SSHORT[j] | SQLSMALLINT | short int |
SQL_C_USHORT[j] | SQLUSMALLINT | unsigned short int |
SQL_C_SLONG[j] | SQLINTEGER | long int |
SQL_C_ULONG[j] | SQLUINTEGER | unsigned long int |
SQL_C_FLOAT | SQLREAL | flutuar |
SQL_C_DOUBLE | SQLDOUBLE, SQLFLOAT | dobrar |
SQL_C_BIT | SQLCHAR | caractere sem sinal |
SQL_C_STINYINT[j] | SQLSCHAR | char assinado |
SQL_C_UTINYINT[j] | SQLCHAR | caractere sem sinal |
SQL_C_SBIGINT | SQLBIGINT | _int64[h] |
SQL_C_UBIGINT | SQLUBIGINT | unsigned _int64[h] |
SQL_C_BINARY | SQLCHAR * | unsigned char * |
SQL_C_BOOKMARK[i] | INDICADOR | unsigned long int[d] |
SQL_C_VARBOOKMARK | SQLCHAR * | unsigned char * |
Todos os tipos de dados de intervalo C | SQL_INTERVAL_STRUCT | Consulte a seção estrutura de intervalo de |
identificador de tipo C SQL_C_TYPE_DATE[c]
typedef ODBC C 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]
typedef ODBC C 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]
typedef ODBC C 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
typedef do ODBC C 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
typedef do ODBC C SQLGUID
tipo C
struct tagSQLGUID {
DWORD Data1;
WORD Data2;
WORD Data3;
BYTE Data4[8];
} SQLGUID;[k]
[a] Os valores do ano, mês, dia, hora, minuto e segundo campos nos tipos de dados C datetime devem estar em conformidade com as restrições do calendário gregoriano. (Consulte restrições do calendário gregoriano posteriormente neste apêndice.)
[b] O valor do campo fração é o número de bilionésimos de segundo e varia de 0 a 999.999.999 (1 menor que 1 bilhão). Por exemplo, o valor do campo fração por 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 (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 se trata de 186AA no 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 HOWTO: 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 usados para entrada de um aplicativo e para saída do driver para o aplicativo. 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 do campo de precisão
[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 preterida 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 o ODBC 2.x aplicativos devem dar suporte a SQL_C_SHORT, SQL_C_LONG e SQL_C_TINYINT, pois 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 tópico a seguir.
Consulte Também
tipos de dados do C no ODBC