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.