Da C a SQL: carattere

Gli identificatori per il tipo di dati ODBC C carattere sono:

SQL_C_CHAR

SQL_C_WCHAR

La tabella seguente illustra i tipi di SQL ODBC in cui possono essere convertiti i dati di tipo carattere C. Per una spiegazione delle colonne e dei termini nella tabella, vedere Conversionedi dati da C SQL tipi di dati .

Nota

Quando i dati di tipo carattere C vengono convertiti in SQL Unicode, la lunghezza dei dati Unicode deve essere un numero pari.

SQL identificatore del tipo Test SQLSTATE
SQL_CHAR

SQL_VARCHAR

SQL_LONGVARCHAR
Lunghezza in byte dei dati <= Lunghezza colonna.

Lunghezza in byte dei dati > di colonna.
n/d

22001
SQL_WCHAR

SQL_WVARCHAR

SQL_WLONGVARCHAR
Lunghezza in caratteri dei dati <= Lunghezza colonna.

Lunghezza in caratteri dei dati > lunghezza della colonna.
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 sono all'interno dell'intervallo del tipo di dati in cui viene convertito il numero

I dati non sono compreso 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 valori letterali numerici
n/d

22001

22003

22018
SQL_BINARY

SQL_VARBINARY

SQL_LONGVARBINARY
(Lunghezza in byte dei dati) / 2 <= lunghezza in byte della colonna

(Lunghezza in byte dei dati) / 2 > di byte della 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 odbc-timestamp-literal valido. la parte relativa al tempo è zero

Il valore dei dati è un valore odbc-timestamp-literal valido. la parte time è diversa da zero[a]

Il valore dei dati non è un valore odbc-date-literal o ODBC-timestamp-literal valido
n/d

n/d

22008

22018
SQL_TYPE_TIME Il valore dei dati è un valore letterale odbc-time valido

Il valore dei dati è un valore odbc-timestamp-literal valido. la parte frazionaria dei secondi è zero[b]

Il valore dei dati è un valore odbc-timestamp-literal valido. la parte dei secondi frazionari è diversa da zero[b]

Il valore dei dati non è un valore letterale odbc-time o ODBC-timestamp-literal valido
n/d

n/d

22008

22018
SQL_TYPE_TIMESTAMP Il valore dei dati è un valore odbc-timestamp-literal valido. parte frazionaria dei secondi non troncata

Il valore dei dati è un valore odbc-timestamp-literal valido. parte frazionaria dei secondi troncata

Il valore dei dati è un valore odbc-date-literal valido [c]

Il valore dei dati è un valore letterale odbc-time valido [d]

Il valore dei dati non è un valore ODBC-date-literal, ODBC-time-literal o ODBC-timestamp-literal
n/d

22008

n/d

n/d

22018
Tutti SQL di intervallo 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 relativa all'ora del timestamp viene troncata.

[b] La parte relativa alla data del timestamp viene ignorata.

[c] La parte relativa all'ora del timestamp è impostata su zero.

[d] La parte relativa alla data del timestamp è impostata sulla data corrente.

[e] L'origine dati/driver 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 di tipo carattere C vengono convertiti in dati numerici, di data, ora o timestamp SQL dati, gli spazi vuoti iniziali e finali vengono ignorati.

Quando i dati di tipo carattere C vengono convertiti in dati SQL binari, ogni due byte di dati di tipo carattere viene convertito 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.

Il driver converte sempre coppie di cifre esadecimali in singoli byte e ignora il byte di terminazione Null. Per questo scopo, 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 sono sconsigliati dall'associazione di dati di tipo carattere C a un tipo di SQL binario. Questa conversione è in genere inefficiente e lenta.