Da SQL a C: carattere
Gli identificatori per i tipi di dati ODBC SQL carattere sono i seguenti:
- SQL_CHAR
- SQL_VARCHAR
- SQL_LONGVARCHAR
- SQL_WCHAR
- SQL_WVARCHAR
- SQL_WLONGVARCHAR
Nella tabella seguente vengono illustrati i tipi di dati ODBC C in cui è possibile convertire i dati SQL di tipo carattere. Per una spiegazione delle colonne e dei termini nella tabella, vedere Conversione di dati da SQL a tipi di dati C.
Identificatore del tipo C | Test | TargetValuePtr | StrLen_or_IndPtr | SQLSTATE |
---|---|---|---|---|
SQL_C_CHAR | Lunghezza byte dei dati <BufferLength Lunghezza byte dei dati >= BufferLength |
Dati Dati troncati |
Lunghezza dei dati in byte Lunghezza dei dati in byte |
N/D 01004 |
SQL_C_WCHAR | Lunghezza carattere dei dati <BufferLength Lunghezza carattere dei dati >= BufferLength |
Dati Dati troncati |
Lunghezza dei dati in caratteri Lunghezza dei dati in caratteri |
N/D 01004 |
SQL_C_STINYINT SQL_C_UTINYINT SQL_C_TINYINT SQL_C_SBIGINT SQL_C_UBIGINT SQL_C_SSHORT SQL_C_USHORT SQL_C_SHORT SQL_C_SLONG SQL_C_ULONG SQL_C_LONG SQL_C_NUMERIC | Dati convertiti senza troncamento[b] Dati convertiti con troncamento di cifre frazionarie[a] La conversione dei dati comporta la perdita di cifre intere (anziché frazionarie) [a] I dati non sono un valore letterale numerico[b] |
Dati Dati troncati Non definito Non definito |
Numero di byte del tipo di dati C Numero di byte del tipo di dati C Non definito Non definito |
N/D 01S07 22003 22018 |
SQL_C_FLOAT SQL_C_DOUBLE | I dati si trovano all'interno dell'intervallo del tipo di dati in cui viene convertito il numero[a] I dati non rientrano nell'intervallo del tipo di dati in cui viene convertito il numero[a] I dati non sono un valore letterale numerico[b] |
Dati Non definito Non definito |
Dimensioni del tipo di dati C Non definito Non definito |
N/D 22003 22018 |
SQL_C_BIT | I dati sono 0 o 1 I dati sono maggiori di 0, minori di 2 e non uguali a 1 I dati sono minori di 0 o maggiori o uguali a 2 I dati non sono un valore letterale numerico |
Dati Dati troncati Non definito Non definito |
1[b] 1[b] Non definito Non definito |
N/D 01S07 22003 22018 |
SQL_C_BINARY | Lunghezza byte dei dati <= BufferLength Lunghezza byte dei dati >BufferLength |
Dati Dati troncati |
Lunghezza dei dati in byte Lunghezza dei dati |
N/D 01004 |
SQL_C_TYPE_DATE | Il valore dei dati è un valore di data valido[a] Il valore dei dati è un valore timestamp valido; la parte temporale è zero[a] Il valore dei dati è un valore timestamp valido; la parte temporale è diversa da zero[a],[c] Il valore dei dati non è un valore di data o un valore timestamp valido[a] |
Dati Dati Dati troncati Non definito |
6[b] 6[b] 6[b] Non definito |
N/D N/D 01S07 22018 |
SQL_C_TYPE_TIME | Il valore dei dati è un valore di tempo valido e il valore dei secondi frazionari è 0[a] Il valore dei dati è un valore timestamp valido o un valore di tempo valido. La parte dei secondi frazionari è zero[a],[d] Il valore dei dati è un valore timestamp valido. La parte dei secondi frazionari è diversa da zero[a],[d],[e] Il valore dei dati non è un valore di ora o un valore timestamp valido[a] |
Dati Dati Dati troncati Non definito |
6[b] 6[b] 6[b] Non definito |
N/D N/D 01S07 22018 |
SQL_C_TYPE_TIMESTAMP | Il valore dei dati è un valore timestamp valido o un valore di tempo valido; la parte dei secondi frazionari non viene troncata[a] Il valore dei dati è un valore timestamp valido o un valore di tempo valido; parte dei secondi frazionari troncata[a] Il valore dei dati è un valore di data valido[a] Il valore dei dati è un valore di ora valido[a] Il valore dei dati non è un valore di data, un valore di ora o un valore timestamp valido[a] |
Dati Dati troncati Dati[f] Dati[g] Non definito |
16[b] 16[b] 16[b] 16[b] Non definito |
N/D 01S07 N/D N/D 22018 |
Tutti i tipi di intervallo C | Il valore dei dati è un valore di intervallo valido; nessun troncamento Il valore dei dati è un valore di intervallo valido; troncamento di uno o più campi finali I dati sono un intervallo valido; precisione significativa del campo iniziale persa Il valore dei dati non è un valore di intervallo valido |
Dati Dati troncati Non definito Non definito |
Lunghezza dei dati in byte Lunghezza dei dati in byte Non definito Non definito |
N/D 01S07 22015 22018 |
[a] Il valore di BufferLength viene ignorato per questa conversione. Il driver presuppone che le dimensioni di *TargetValuePtr siano le dimensioni del tipo di dati C.
[b] Questa è la dimensione del tipo di dati C corrispondente.
[c] La parte temporale del valore timestamp viene troncata.
[d] La parte relativa alla data del valore timestamp viene ignorata.
[e] La parte dei secondi frazionari del timestamp viene troncata.
[f] I campi dell'ora della struttura timestamp sono impostati su zero.
[g] I campi data della struttura timestamp vengono impostati sulla data corrente.
Spazi aggiuntivi
Gli spazi iniziali e finali vengono ignorati quando i dati di tipo carattere SQL vengono convertiti in uno dei tipi seguenti:
- date
- numeric
- time
- timestamp
- dati interval C