Condividi tramite


Conversione dei dati con il driver ODBC per DB2

La progettazione delle API ODBC è simile ad altre API ISAM. Queste API sono basate su handle. Dopo l'apertura di un file, l'applicazione può determinare le dimensioni del buffer richieste per memorizzare una riga, utilizzare l'API cursore per lo spostamento e, facoltativamente, recuperare una o più righe di dati con il binding a livello di riga.

I dati vengono convertiti in tipi di dati SQL predefiniti, come definito in ODBC. Nella tabella seguente sono elencate queste conversioni.

Tipo di dati DB2 Tipo di dati SQL predefinito Esposto come tipo nativo in SQLGetTypeInfo Commenti
BIGINT Integer di 8 byte.

Questo tipo di dati è supportato solo in DB2 UDB.
BLOB Un BLOB (Binary Large Object) è una stringa di lunghezza variabile che può raggiungere fino a 2 gigabyte di lunghezza. Un BLOB è destinato principalmente alla memorizzazione di dati binari.

Questo tipo di dati non è supportato dal driver ODBC per DB2.
CHAR (BIT) SQL_BINARY No Stringa di caratteri a lunghezza fissa (solo doppio byte).
CHAR (SBCS) SQL_CHAR Una stringa di caratteri SBCS di lunghezza fissa.
CHAR (MISTO) SQL_CHAR No Stringa di caratteri mista a lunghezza fissa (singolo e doppio byte).
CLOB Un CLOB (Character Large Object) è una stringa di lunghezza variabile che può raggiungere fino a 2 gigabyte di lunghezza. Un CLOB è utilizzato per memorizzare grandi quantità di dati basati su set di caratteri a byte singolo. Un CLOB può essere considerato come una stringa di caratteri.

Questo tipo di dati non è supportato dal driver ODBC per DB2.
DATE SQL_TYPE_DATE Stringa di 10 byte contenente una data.

Questo tipo di dati viene convertito in un SQL_DATE da usare da ODBC.
DBCLOB Un oggetto large Double-Byte carattere (DBCLOB) è una stringa di lunghezza variabile di caratteri double-byte che possono essere fino a 2 gigabyte di lunghezza (1.073.741.823 caratteri a byte doppie). Viene usato un DBCLOB per archiviare dati di set di caratteri double-byte di grandi dimensioni. Un DBCLOB viene considerato come una stringa grafica.

Non è supportato dal driver ODBC per DB2.
DECIMAL SQL_DECIMAL Un numero decimale compresso.
DOUBLE SQL_DOUBLE Un numero di 8 byte a virgola mobile a precisione doppia.
FLOAT SQL_FLOAT Un numero di 8 byte a virgola mobile a precisione doppia. Questo tipo di dati corrisponde a DOUBLE.
GRAFICA (DBCS) SQL_CHAR No Stringa grafica a lunghezza fissa costituita da una sequenza di dati di stringa di caratteri double byte (solo DBCS).
INTEGER SQL_INTEGER Intero a 4 byte con precisione di 10 cifre che vanno da -2,147,463,648 a +2,147,483,647.
LONG VARCHAR (BIT) SQL_BINARY No Stringa di caratteri a lunghezza variabile (solo doppio byte).
LONG VARCHAR (SBCS) SQL_CHAR No Stringa di caratteri SBCS a lunghezza variabile.
LONG VARCHAR (MIXED) SQL_CHAR No Stringa a lunghezza variabile mista (singolo e doppio byte).
LONG VARGRAPHIC (DBCS) SQL_LONGVARCHAR No Stringa grafica a lunghezza variabile costituita da una sequenza di dati di caratteri double byte (solo DBCS).
SMALLINT SQL_SMALLINT Uno SMALLINT (Small Integer) è un integer di due byte con una precisione di 5 cifre, con valore compreso tra -32.768 e +32.767.
REAL SQL_REAL Un numero di 4 byte a virgola mobile a precisione singola.
TIME SQL_TYPE_TIME Stringa di 8 byte contenente un'ora.

Durante l'uso di oggetti dati ActiveX per la restituzione di dati da un tipo di dati DB2 TIME, ADO restituisce un valore DATETIME.
TIMESTAMP SQL_TYPE_TIMESTAMP Una stringa di 26 byte che rappresenta data, ora e microsecondi.
VARCHAR (BIT) SQL_BINARY No Stringa di caratteri a lunghezza variabile (solo a byte doppio).
VARCHAR (SBCS) SQL_CHAR Una stringa di caratteri di lunghezza variabile.
VARCHAR (MIXED) SQL_CHAR No Stringa di caratteri mista a lunghezza variabile (a bye singolo e doppio).
VARGRAPHIC (DBCS) SQL_VARCHAR No Stringa grafica a lunghezza variabile costituita da una sequenza di dati stringa di caratteri a byte doppio (solo DBCS).

Non tutte le piattaforme e le versioni di DB2 supportano tutti i tipi di dati di riferimento precedenti. Consultare le informazioni di riferimento su IBM SQL per la piattaforma e la piattaforma e la versione specifiche di DB2.

Il driver ODBC per DB2 espone solo i tipi di dati DB2 selezionati come tipi nativi nella funzione del catalogo ODBC GetTypeInfo. Ad esempio, il driver non espone i tipi LONG CHARACTER o VARYING LONG CHARACTER. Questi tipi vengono invece esposti rispettivamente come CHARACTER e VARYING CHARACTER. Inoltre, il driver espone CHARACTER FOR SBCS DATA, CHARACTER FOR MIXED DATA e CHARACTER FOR BIT DATA come CHARACTER. Il driver espone VARYING CHARACTER FOR SBCS DATA, VARYING CHARACTER FOR MIXED DATA e VARYING CHARACTER FOR BIT DATA as VARYING CHARACTER.The driver exposes VARYING CHARACTER FOR BIT DATA AS VARYING CHARACTER. Tuttavia, il driver ODBC per DB2 restituisce questi tipi di dati LONG e VARYING LONG se si legge una tabella con questi tipi di dati. Ad esempio, quando si legge una tabella con una stringa di caratteri variabile di lunghezza maggiore di 254 byte, il driver ODBC per DB2 restituisce un valore LONG VARCHAR.

La lunghezza massima dei tipi di dati DB2 character e graphic string dipende dalla piattaforma e dalla versione DB2. Ad esempio, un tipo CHAR in DB2 per z/OS V5R1 ha una lunghezza massima di 254 byte, mentre un tipo CHAR in DB2/400 V4R4 ha una lunghezza massima di 32.766 byte.

Le conversioni di dati da un tipo numerico di grandi dimensioni a un tipo numerico ridotto sono supportate (da DOUBLE a SINGLE e da INT a SMALLINT, ad esempio), è possibile che si verifichino errori di troncamento e conversione che non verranno segnalati dal driver ODBC per DB2.

Usando il driver ODBC per DB2, alcune conversioni di stringhe da EBCDIC a ASCII e quindi in EBCDIC sono asimmetriche e possono comportare stringhe diverse dall'originale. La specifica EBCDIC contiene ordinali per cui non è definito un carattere. ODBC Driver for DB2 converte tutti questi caratteri non definiti nel carattere punto interrogativo ("?"). Pertanto, quando le stringhe ASCII contenenti questi caratteri vengono convertite nuovamente in EBCDIC, questi caratteri non definiti vengono sostituiti con punti interrogativi. Per proteggere le stringhe EBCDIC contenenti caratteri indefiniti, questi campi devono essere contrassegnati come stringhe binarie e mappati all'applicazione.

Le conversioni di caratteri DA ANSI a EBCDIC interessate includono quanto segue:

Valore carattere (decimale) Valore carattere (esadecimale) Tabella codici ANSI 1252 Carattere EBCDIC dopo la conversione in CCSID 37
128 0x80 Non usato ?
130 0x82 Virgoletta singola bassa ?
131 0x83 Lettera latina F con gancio ?
132 0x84 Virgoletta doppia bassa ?
133 0x85 Puntini di sospensione ?
134 0x86 Spada ?
135 0x87 Doppia spada ?
136 0x88 Segno di per mille ?
137 0x89 Lettera S con pipa ?
138 0x8A Parentesi angolare sinistra ?
139 0x8B OE con legatura ?
140 0x8C Non usato ?
142 0x8E Non usato ?
145-156 0x91-0x9C ?
158-159 0x9E-0x9F ?