Configurazione dei valori dei parametri

Per impostare il valore di un parametro, l'applicazione imposta semplicemente il valore della variabile associata al parametro. Non è importante quando il valore viene impostato, purché sia impostato prima dell'esecuzione dell'istruzione. L'applicazione può impostare il valore prima o dopo l'associazione della variabile e può modificare il valore tutte le volte che vuole. Quando l'istruzione viene eseguita, il driver recupera semplicemente il valore corrente della variabile. Ciò è particolarmente utile quando un'istruzione preparata viene eseguita più volte; l'applicazione imposta nuovi valori per alcune o tutte le variabili ogni volta che viene eseguita l'istruzione. Per un esempio, vedere Esecuzione preparata, illustrata in una parte precedente di questa sezione.

Se nella chiamata a SQLBindParameter è stato associato un buffer di lunghezza/indicatore, questo deve essere impostato su uno dei valori seguenti prima dell'esecuzione dell'istruzione:

  • Lunghezza dei byte dei dati nella variabile associata. Il driver controlla questa lunghezza solo se la variabile è di tipo carattere o binario (ValueType è SQL_C_CHAR o SQL_C_BINARY).

  • SQL_NTS. I dati sono una stringa con terminazione Null.

  • SQL_NULL_DATA. Il valore dei dati è NULL e il driver ignora il valore della variabile associata.

  • SQL_DATA_AT_EXEC o il risultato della macro SQL_LEN_DATA_AT_EXEC. Il valore del parametro deve essere inviato con SQLPutData. Per altre informazioni, vedere Inviare dati Long, più avanti in questa sezione.

La tabella seguente illustra i valori della variabile associata e il buffer di lunghezza/indicatore impostati dall'applicazione per un'ampia gamma di valori di parametro.

Parametro

value
Parametro

(SQL)

tipo di dati
Variabile (C)

tipo di dati
Valore in

Associato

Variabile
Valore in

lunghezza/indicatore

buffer[d]
"ABC" SQL_CHAR SQL_C_CHAR ABC\0[a] SQL_NTS o 3
10 SQL_INTEGER SQL_C_SLONG 10 --
10 SQL_INTEGER SQL_C_CHAR 10\0[a] SQL_NTS o 2
1 P.M. SQL_TYPE_TIME SQL_C_TYPE_TIME 13,0,0[b] --
1 P.M. SQL_TYPE_TIME SQL_C_CHAR {t '13:00:00'}\0[a], [c] SQL_NTS o 14
NULL SQL_SMALLINT SQL_C_SSHORT -- SQL_NULL_DATA

[a] "\0" rappresenta un carattere di terminazione Null. Il carattere di terminazione Null è necessario solo se il valore nel buffer di lunghezza/indicatore è SQL_NTS.

[b] I numeri in questo elenco sono i numeri archiviati nei campi della struttura TIME_STRUCT.

[c] La stringa usa la clausola ODBC date escape. Per ulteriori informazioni, vedere Valori letterali data, ora e data e ora.

[d] I driver devono sempre controllare questo valore per verificare se si tratta di un valore speciale, ad esempio SQL_NULL_DATA.

Le operazioni eseguite da un driver con un valore di parametro in fase di esecuzione dipendono dal driver. Se necessario, il driver converte il valore dal tipo di dati C e dalla lunghezza in byte della variabile associata al tipo di dati SQL, alla precisione e alla scala del parametro. Nella maggior parte dei casi, il driver invia quindi il valore all'origine dati. In alcuni casi, formatta il valore come testo e lo inserisce nell'istruzione SQL prima di inviare l'istruzione all'origine dati.