Associazione di marcatori di parametro
L'applicazione associa i parametri chiamando SQLBindParameter. SQLBindParameter associa un parametro alla volta. Con questa istruzione, l'applicazione specifica quanto segue:
Il numero parametro. I parametri vengono numerati in ordine crescente di parametri nell'istruzione SQL, partendo dal numero 1. Sebbene sia lecito specificare un numero di parametro superiore al numero di parametri dell'istruzione SQL, il valore del parametro verrà ignorato quando viene eseguita l'istruzione.
Il tipo di parametro (input, input/output o output). Ad eccezione dei parametri delle chiamate di procedura, tutti i parametri sono parametri di input. Per ulteriori informazioni, vedere Parametri di procedura, più avanti in questa sezione.
Il tipo di dati C, l’indirizzo e lunghezza in byte della variabile associata al parametro. Il driver deve essere in grado di convertire i dati dal tipo di dati C al tipo di dati SQL o verrà restituito un errore. Per un elenco delle conversioni supportate, vedere Conversione dai tipi di dati da C ai tipi di dati SQL nell'Appendice D: Tipi di dati.
Il tipo di dati SQL, la precisione e la dimensione del parametro stesso.
L’indirizzo di un buffer di lunghezza/indicatore. Fornisce la lunghezza in byte dei dati binari o di tipo carattere, specifica che i dati sono NULL o specifica che i dati verranno inviati con SQLPutData. Per altre informazioni, vedere Uso di valori di lunghezza/indicatore.
Ad esempio, il codice seguente associa SalesPerson e CustID ai parametri delle colonne SalesPerson e CustID. Poiché SalesPerson contiene dati di tipo carattere, ovvero la lunghezza della variabile, il codice specifica la lunghezza in byte di SalesPerson (11) e associa SalesPersonLenOrInd in modo che possa contenere la lunghezza in byte dei dati di SalesPerson. Queste informazioni non sono necessarie per CustID perché contiene dati interi, ovvero a lunghezza fissa.
SQLCHAR SalesPerson[11];
SQLINTEGER SalesPersonLenOrInd, CustIDInd;
SQLUINTEGER CustID;
// Bind SalesPerson to the parameter for the SalesPerson column and
// CustID to the parameter for the CustID column.
SQLBindParameter(hstmt1, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 10, 0,
SalesPerson, sizeof(SalesPerson), &SalesPersonLenOrInd);
SQLBindParameter(hstmt1, 2, SQL_PARAM_INPUT, SQL_C_ULONG, SQL_INTEGER, 10, 0,
&CustID, 0, &CustIDInd);
// Set values of salesperson and customer ID and length/indicators.
strcpy_s((char*)SalesPerson, _countof(SalesPerson), "Garcia");
SalesPersonLenOrInd = SQL_NTS;
CustID = 1331;
CustIDInd = 0;
// Execute a statement to get data for all orders made to the specified
// customer by the specified salesperson.
SQLExecDirect(hstmt1,"SELECT * FROM Orders WHERE SalesPerson=? AND CustID=?",SQL_NTS);
Quando viene chiamato SQLBindParameter, il driver archivia queste informazioni nella struttura dell'istruzione. Quando l'istruzione viene eseguita, il driver usa le informazioni per recuperare i dati dei parametri e inviarli all'origine dati.
Nota
In ODBC 1.0 i parametri erano associati con SQLSetParam. Gestione driver esegue il mapping delle chiamate tra SQLSetParam e SQLBindParameter, a seconda delle versioni di ODBC usate dall'applicazione e dal driver.