Tipi di dati C

I tipi di dati ODBC C indicano il tipo di dati dei buffer C usati per archiviare i dati nell'applicazione.

Tutti i driver devono supportare tutti i tipi di dati C. Questa operazione è necessaria perché tutti i driver devono supportare tutti i tipi C in cui è possibile convertire i tipi SQL supportati e tutti i driver supportano almeno un tipo SQL di caratteri. Poiché il tipo SQL carattere può essere convertito in e da tutti i tipi C, tutti i driver devono supportare tutti i tipi C.

Il tipo di dati C viene specificato nelle funzioni SQLBindCol e SQLGetData con l'argomento TargetType e nella funzione SQLBindParameter con l'argomento ValueType . Può anche essere specificato chiamando SQLSetDescField per impostare il campo SQL_DESC_CONCISE_TYPE di un oggetto ARD o APD oppure chiamando SQLSetDescRec con l'argomento Type (e l'argomento SubType, se necessario) e l'argomento DescriptorHandle impostato sull'handle di un ARD o APD.

Nelle tabelle seguenti sono elencati gli identificatori di tipo validi per i tipi di dati C. Nella tabella sono elencati anche il tipo di dati ODBC C che corrisponde a ogni identificatore e alla definizione di questo tipo di dati.

Identificatore del tipo C Typedef 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 float
SQL_C_DOUBLE SQLDOUBLE, SQLFLOAT double
SQL_C_BIT SQLCHAR unsigned char
SQL_C_STINYINT[j] SQLSCHAR signed char
SQL_C_UTINYINT[j] SQLCHAR unsigned char
SQL_C_SBIGINT SQLBIGINT _int64[h]
SQL_C_UBIGINT SQLUBIGINT unsigned _int64[h]
SQL_C_BINARY SQLCHAR * unsigned char *
SQL_C_BOOKMARK[i] SEGNALIBRO unsigned long int[d]
SQL_C_VARBOOKMARK SQLCHAR * unsigned char *
Tutti i tipi di dati intervallo C SQL_INTERVAL_STRUCT Vedere la sezione Struttura intervallo C, più avanti in questa appendice.

Identificatore di 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]  

Identificatore di 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]  

Identificatore di 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]  

Identificatore di tipo C SQL_C_NUMERIC

Typedef 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;  

Identificatore di tipo C SQL_C_GUID

SQLGUID typedef ODBC C

Tipo C

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

[a] I valori dei campi year, month, day, hour, minute e second nei tipi di dati datetime C devono essere conformi ai vincoli del calendario gregoriano. (Vedere Vincoli del calendario gregoriano più avanti in questa appendice.

[b] Il valore del campo frazionario è il numero di miliardi di secondi e varia da 0 a 999.999.999.999 (1 minore di 1 miliardo). Ad esempio, il valore del campo frazione per un mezzo secondo è 500.000.000, per un migliaio di secondo (un millisecondo) è 1.000.000, per un milionesimo di secondo (un microsecondo) è 1.000 e per un miliardo di secondo (un nanosecondo) è 1.

[c] In ODBC 2.x, i tipi di dati di data, ora e timestamp C sono SQL_C_DATE, SQL_C_TIME e SQL_C_TIMESTAMP.

[d] Le applicazioni ODBC 3*.x* devono usare SQL_C_VARBOOKMARK, non SQL_C_BOOKMARK. Quando un'applicazione ODBC 3*.x* funziona con ODBC 2.x driver, ODBC 3*.x* Driver Manager eseguirà il mapping SQL_C_VARBOOKMARK a SQL_C_BOOKMARK.

[e] Un numero viene archiviato nel campo val della struttura SQL_NUMERIC_STRUCT come intero scalato, in modalità little endian (il byte più a sinistra è il byte meno significativo). Ad esempio, il numero 10,001 base 10, con una scala pari a 4, viene ridimensionato su un numero intero pari a 100010. Poiché questo è 186AA in formato esadecimale, il valore in SQL_NUMERIC_STRUCT sarebbe "AA 86 01 00 00 ... 00", con il numero di byte definiti dal #define SQL_MAX_NUMERIC_LEN.

Per altre informazioni sulle SQL_NUMERIC_STRUCT, vedere HOWTO: Recupero di dati numerici con SQL_NUMERIC_STRUCT.

[f] I campi di precisione e scala del tipo di dati SQL_C_NUMERIC vengono usati per l'input da un'applicazione e per l'output dal driver all'applicazione. Quando il driver scrive un valore numerico nella SQL_NUMERIC_STRUCT, userà il proprio valore predefinito specifico del driver come valore per il campo di precisione e userà il valore nel campo SQL_DESC_SCALE del descrittore dell'applicazione (che per impostazione predefinita è 0) per il campo di scala . Un'applicazione può fornire valori specifici per precisione e scala impostando i campi SQL_DESC_PRECISION e SQL_DESC_SCALE del descrittore dell'applicazione.

[g] Il campo del segno è 1 se positivo, 0 se negativo.

[h] _int64 potrebbe non essere fornito da alcuni compilatori.

[i] _SQL_C_BOOKMARK è stato deprecato in ODBC 3*.x*.

[j] _SQL_C_SHORT, SQL_C_LONG e SQL_C_TINYINT sono stati sostituiti in ODBC da tipi firmati e non firmati: SQL_C_SSHORT e SQL_C_USHORT, SQL_C_SLONG e SQL_C_ULONG e SQL_C_STINYINT e SQL_C_UTINYINT. Driver ODBC 3*.x* che deve funzionare con ODBC 2.Le applicazioni x devono supportare SQL_C_SHORT, SQL_C_LONG e SQL_C_TINYINT, perché quando vengono chiamate, Gestione driver li passa al driver.

[k] SQL_C_GUID può essere convertito solo in SQL_CHAR o SQL_WCHAR.

In questa sezione viene trattato l'argomento seguente.

Vedi anche

Tipi di dati C in ODBC