Da C a SQL: carattere
Gli identificatori per il tipo di dati ODBC C carattere sono:
SQL_C_CHAR
SQL_C_WCHAR
Nella tabella seguente vengono illustrati i tipi di dati SQL ODBC in cui è possibile convertire i dati di tipo carattere C. Per una spiegazione delle colonne e dei termini nella tabella, vedere Conversione di dati da C a tipi di dati SQL.
Nota
Quando i dati C carattere vengono convertiti in dati SQL Unicode, la lunghezza dei dati Unicode deve essere un numero pari.
Identificatore del tipo SQL | Test | SQLSTATE |
---|---|---|
SQL_CHAR SQL_VARCHAR SQL_LONGVARCHAR |
Lunghezza byte di dati <= Lunghezza colonna. Lunghezza byte della lunghezza della colonna di dati > . |
N/D 22001 |
SQL_WCHAR SQL_WVARCHAR SQL_WLONGVARCHAR |
Lunghezza carattere di dati <= Lunghezza colonna. Lunghezza carattere della lunghezza della colonna di dati > . |
N/D 22001 |
SQL_DECIMAL SQL_NUMERIC SQL_TINYINT SQL_SMALLINT SQL_INTEGER SQL_BIGINT |
Dati convertiti senza troncamento Dati convertiti con troncamento di cifre frazionarie[e] La conversione dei dati comporta la perdita di cifre intere (anziché frazionarie) [e] Il valore dei dati non è un valore letterale numerico |
N/D 22001 22001 22018 |
SQL_REAL SQL_FLOAT SQL_DOUBLE |
I dati si trovano all'interno dell'intervallo del tipo di dati in cui viene convertito il numero I dati non rientrano nell'intervallo del tipo di dati in cui viene convertito il numero Il valore dei dati non è un valore letterale numerico |
N/D 22003 22018 |
SQL_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 |
N/D 22001 22003 22018 |
SQL_BINARY SQL_VARBINARY SQL_LONGVARBINARY |
(Lunghezza byte dei dati) / 2 <= lunghezza byte colonna (Lunghezza byte dei dati) /2 > lunghezza byte colonna Il valore dei dati non è un valore esadecimale |
N/D 22001 22018 |
SQL_TYPE_DATE | Il valore dei dati è un valore letterale di data ODBC valido Il valore dei dati è un valore letterale ODBC-timestamp-literal valido; la parte temporale è zero Il valore dei dati è un valore letterale ODBC-timestamp valido; la parte temporale è diversa da zero[a] Il valore dei dati non è un valore letterale ODBC-date-valid o ODBC-timestamp-literal |
N/D N/D 22008 22018 |
SQL_TYPE_TIME | Il valore dei dati è un valore letterale ODBC-time-literal valido Il valore dei dati è un valore letterale ODBC-timestamp-literal valido; la parte dei secondi frazionari è zero[b] Il valore dei dati è un valore letterale ODBC-timestamp-literal valido; la parte dei secondi frazionari è diversa da zero[b] Il valore dei dati non è un valore letterale ODBC-time-time o ODBC-timestamp-literal valido |
N/D N/D 22008 22018 |
SQL_TYPE_TIMESTAMP | Il valore dei dati è un valore letterale ODBC-timestamp-literal valido; parte dei secondi frazionari non troncata Il valore dei dati è un valore letterale ODBC-timestamp valido; parte dei secondi frazionari troncata Il valore dei dati è un valore letterale odbc-date-literal valido[c] Il valore dei dati è un valore letterale ODBC-time-literal[d] valido Il valore dei dati non è un valore letterale ODBC-date-literal, ODBC-time-literal o ODBC-timestamp-literal |
N/D 22008 N/D N/D 22018 |
Tutti i tipi di intervallo SQL | Il valore dei dati è un valore di intervallo valido; non si verifica alcun troncamento Il valore dei dati è un valore di intervallo valido. Il valore in uno dei campi viene troncato Il valore dei dati non è un valore letterale intervallo valido |
N/D 22015 22018 |
[a] La parte temporale del timestamp viene troncata.
[b] La parte relativa alla data del timestamp viene ignorata.
[c] La parte temporale del timestamp è impostata su zero.
[d] La parte relativa alla data del timestamp viene impostata sulla data corrente.
[e] L'origine driver/dati attende in modo efficace fino a quando non viene ricevuta l'intera stringa (anche se i dati di tipo carattere vengono inviati in parti tramite chiamate a SQLPutData) prima di tentare di eseguire la conversione.
Quando i dati C carattere vengono convertiti in dati SQL numerici, di data, ora o timestamp, gli spazi vuoti iniziali e finali vengono ignorati.
Quando i dati C di tipo carattere vengono convertiti in dati SQL binari, ogni due byte di dati di tipo carattere vengono convertiti in un singolo byte (8 bit) di dati binari. Ogni due byte di dati di tipo carattere rappresenta un numero in formato esadecimale. Ad esempio, "01" viene convertito in un 00000001 binario e "FF" viene convertito in un 11111111 binario.
Il driver converte sempre coppie di cifre esadecimali in singoli byte e ignora il byte di terminazione Null. Per questo motivo, se la lunghezza della stringa di caratteri è dispari, l'ultimo byte della stringa (escluso il byte di terminazione Null, se presente) non viene convertito.
Nota
Gli sviluppatori di applicazioni non sono scoraggiati dall'associazione di dati C di tipo carattere a un tipo di dati SQL binario. Questa conversione è in genere inefficiente e lenta.