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.