Tipi di dati C in ODBC

ODBC definisce i tipi di dati C utilizzati dalle variabili dell'applicazione e i corrispondenti identificatori di tipo. Questi vengono usati dai buffer associati alle colonne del set di risultati e ai parametri dell'istruzione. Si supponga, ad esempio, che un'applicazione voglia recuperare i dati da una colonna del set di risultati in formato carattere. Dichiara una variabile con il tipo di dati SQLCHAR * e associa questa variabile alla colonna del set di risultati con un identificatore di tipo di SQL_C_CHAR. Per un elenco completo dei tipi di dati C e degli identificatori di tipo, vedere Appendice D: Tipi di dati.

ODBC definisce anche un mapping predefinito da ogni tipo di dati SQL a un tipo di dati C. Ad esempio, viene eseguito il mapping di un numero intero a 2 byte nell'origine dati a un numero intero a 2 byte nell'applicazione. Per usare il mapping predefinito, un'applicazione specifica l'identificatore di tipo SQL_C_DEFAULT. Tuttavia, l'uso di questo identificatore è sconsigliato per motivi di interoperabilità.

Tutti i tipi di dati C interi definiti in ODBC 1.x erano con segno. I tipi di dati C senza segno e i relativi identificatori di tipo sono stati aggiunti in ODBC 2.0. Per questo motivo, le applicazioni e i driver devono essere particolarmente attenti quando si gestiscono le versioni 1.x.

Estendibilità del tipo di dati C

In ODBC 3.8 è possibile specificare tipi di dati C specifici del driver. Questo consente di associare un tipo SQL come tipo C specifico del driver nelle applicazioni ODBC quando si chiama SQLBindCol, SQLGetData o SQLBindParameter. Ciò può essere utile per supportare nuovi tipi di server, perché i tipi di dati C esistenti potrebbero non rappresentare correttamente i tipi di dati del nuovo server. L'uso di tipi C specifici del driver può aumentare il numero di conversioni che i driver possono eseguire.

Si supponga, ad esempio, che un sistema di gestione di database (DBMS) abbia introdotto un nuovo tipo SQL, DATETIMEOFFSET, per rappresentare la data e l'ora con le informazioni sul fuso orario. Non esisterebbe alcun tipo C specifico in ODBC corrispondente a DATETIMEOFFSET. Un'applicazione dovrebbe associare DATETIMEOFFSET come SQL_C_BINARY ed eseguirne il cast a un tipo di dati definito dall'utente. A partire da ODBC 3.8 con estendibilità del tipo di dati C, un driver può definire un nuovo tipo C corrispondente. Ad esempio, per il nuovo tipo SQL DATETIMEOFFSET, il driver può definire un nuovo tipo C corrispondente, ad esempio SQL_C_DATETIMEOFFSET. Un'applicazione può quindi associare il nuovo tipo SQL come tipo C specifico del driver.

Un tipo di dati C viene definito nel driver come segue:

  • Il livello di conformità ODBC per un'applicazione, il driver ODBC e Gestione driver sono 3.8 (o versione successiva).

  • L'intervallo di dati di un tipo C specifico del driver è compreso tra 0x4000 e 0x7FFF.

  • Il driver definisce la struttura dei dati corrispondenti al tipo C. Questa operazione può essere eseguita nell'SDK specifico del driver.

Gestione driver non convaliderà un tipo C definito nell'intervallo di 0x4000 e 0x7FFF; il driver eseguirà la convalida e qualsiasi conversione del tipo di dati. Tuttavia, se l'intervallo di dati di un tipo C passato a Gestione driver è compreso tra 0x0000 e 0x3FFF o tra 0x8000 e 0xFFFF, Gestione driver convaliderà il tipo di dati C.

Nota

I tipi di dati C specifici del driver devono essere descritti nella documentazione del driver.

Per specificare un livello di conformità ODBC 3.8, un'applicazione chiama SQLSetEnvAttr con l'attributo SQL_ATTR_ODBC_VERSION impostato su SQL_OV_ODBC3_80. Per determinare la versione del driver, un'applicazione chiama SQLGetInfo con SQL_DRIVER_ODBC_VER.

Per altre informazioni su ODBC 3.8, vedere Novità di ODBC 3.8.

Vedi anche

Tipi di dati C