Conversione di dati da SQL ai tipi di dati C

Quando un'applicazione chiama SQLFetch, SQLFetchScroll o SQLGetData, il driver recupera i dati dall'origine dati. Se necessario, converte i dati dal tipo di dati in cui il driver lo ha recuperato nel tipo di dati specificato dall'argomento TargetType in SQLBindCol o SQLGetData. Infine, archivia i dati nella posizione a cui punta l'argomento TargetValuePtr in SQLBindCol o SQLGetData (e il campo SQL_DESC_DATA_PTR del ARD).

Nella tabella seguente vengono illustrate le conversioni supportate dai tipi di dati ODBC SQL ai tipi di dati ODBC C. Un cerchio pieno indica la conversione predefinita per un tipo di dati SQL (tipo di dati C in cui verranno convertiti i dati quando il valore di TargetType è SQL_C_DEFAULT). Un cerchio vuoto indica una conversione supportata.

Per un'applicazione ODBC 3.x che utilizza un driver ODBC 2.x , la conversione da tipi di dati specifici del driver potrebbe non essere supportata.

Il formato dei dati convertiti non è interessato dall'impostazione paese/area geografica di Windows.

Le tabelle nelle sezioni seguenti descrivono come il driver o l'origine dati converte i dati recuperati dall'origine dati; I driver sono necessari per supportare le conversioni in tutti i tipi di dati ODBC C dai tipi di dati SQL ODBC supportati. Per un determinato tipo di dati ODBC SQL, la prima colonna della tabella elenca i valori di input legali dell'argomento TargetType in SQLBindCol e SQLGetData. La seconda colonna elenca i risultati di un test, spesso usando l'argomento BufferLength specificato in SQLBindCol o SQLGetData, che il driver esegue per determinare se è in grado di convertire i dati. Per ogni risultato, la terza e la quarta colonna elencano i valori inseriti nei buffer specificati dagli argomenti TargetValuePtr e StrLen_or_IndPtr specificati in SQLBindCol o SQLGetData dopo che il driver ha tentato di convertire i dati. (L'oggetto StrLen_or_IndPtr argomento corrisponde al campo SQL_DESC_OCTET_LENGTH_PTR della ARD. L'ultima colonna elenca SQLSTATE restituito per ogni risultato da SQLFetch, SQLFetchScroll o SQLGetData.

Se l'argomento TargetType in SQLBindCol o SQLGetData contiene un identificatore per un tipo di dati ODBC C non visualizzato nella tabella per un determinato tipo di dati SQL ODBC, SQLFetch, SQLFetchScroll o SQLGetData restituisce SQLSTATE 07006 (violazione dell'attributo del tipo di dati con restrizioni). Se l'argomento TargetType contiene un identificatore che specifica una conversione da un tipo di dati SQL specifico del driver a un tipo di dati ODBC C e questa conversione non è supportata dal driver, SQLFetch, SQLFetchScroll o SQLGetData restituisce SQLSTATE HYC00 (funzionalità facoltativa non implementata).

Anche se non viene visualizzato nelle tabelle, il driver restituisce SQL_NULL_DATA nel buffer specificato dall'argomento StrLen_or_IndPtr quando il valore dei dati SQL è NULL. Per una spiegazione dell'uso di StrLen_or_IndPtr quando vengono effettuate più chiamate per recuperare i dati, vedere la descrizione della funzione SQLGetData . Quando i dati SQL vengono convertiti in dati C di tipo carattere, il conteggio dei caratteri restituito in *StrLen_or_IndPtr non include il byte di terminazione Null. Se TargetValuePtr è un puntatore Null, SQLGetData restituisce SQLSTATE HY009 (uso non valido del puntatore Null); in SQLBindCol questa operazione annulla l'associazione della colonna.

Nelle tabelle vengono usati i termini e le convenzioni seguenti:

  • La lunghezza dei byte dei dati è il numero di byte di dati C disponibili per la restituzione in *TargetValuePtr, indipendentemente dal fatto che i dati vengano troncati prima che vengano restituiti all'applicazione. Per i dati stringa, questo non include lo spazio per il carattere di terminazione Null.

  • Lunghezza byte carattere è il numero totale di byte necessari per visualizzare i dati in formato carattere. Questo valore è definito per ogni tipo di dati C nella sezione Dimensioni di visualizzazione, ad eccezione del fatto che la lunghezza dei byte dei caratteri è in byte mentre le dimensioni della visualizzazione sono in caratteri.

  • Le parole in corsivo rappresentano argomenti o elementi della funzione della grammatica SQL. Per la sintassi degli elementi grammaticali, vedere Appendice C: Grammatica SQL.

Questa sezione contiene i seguenti argomenti: