Condividi tramite


Associazione di parametri in base al nome (parametri denominati)

Alcuni DBMS consentono a un'applicazione di specificare i parametri in una stored procedure in base al nome anziché alla posizione nella chiamata di procedura. Tali parametri sono chiamati parametri denominati. ODBC supporta l'uso di parametri denominati. In ODBC i parametri denominati vengono usati solo nelle chiamate alle stored procedure e non possono essere usati in altre istruzioni SQL.

Il driver controlla il valore del campo SQL_DESC_UNNAMED del DP per determinare se vengono utilizzati parametri denominati. Se SQL_DESC_UNNAMED non è impostato su SQL_UNNAMED, il driver usa il nome nel campo SQL_DESC_NAME del DP per identificare il parametro. Per associare il parametro, un'applicazione può chiamare SQLBindParameter per specificare le informazioni sul parametro e quindi chiamare SQLSetDescField per impostare il campo SQL_DESC_NAME del DP. Quando si usano parametri denominati, l'ordine del parametro nella chiamata di procedura non è importante e il numero di record del parametro viene ignorato.

La differenza tra parametri senza nome e parametri denominati sta nella relazione tra il numero di record del descrittore e il numero di parametro nella procedura. Quando si usano parametri senza nome, il primo marcatore di parametro è correlato al primo record nel descrittore dei parametri, che a sua volta è correlato al primo parametro (in ordine di creazione) della chiamata di procedura. Quando si usano parametri denominati, il primo marcatore di parametro è ancora correlato al primo record del descrittore di parametro, ma la relazione tra il numero di record del descrittore e il numero di parametro della procedura non esiste più. I parametri denominati non usano il mapping del numero di record del descrittore alla posizione del parametro della procedura; viene invece eseguito il mapping del nome del record descrittore al nome del parametro della procedura.

Nota

Se il popolamento automatico del DP è abilitato, il driver popola il descrittore in modo che l'ordine dei record del descrittore corrisponda all'ordine dei parametri nella definizione della procedura, anche se vengono utilizzati parametri denominati.

Se viene usato un parametro denominato, tutti i parametri devono essere parametri denominati. Se un parametro non è un parametro denominato, allora nessuno dei parametri può essere denominato. Se ci fosse una combinazione di parametri denominati e parametri senza nome, il comportamento sarebbe dipendente dal driver.

Come esempio di parametri denominati, si supponga che una stored procedure di SQL Server sia stata definita come segue:

CREATE PROCEDURE test @title_id int = 1, @quote char(30) AS <blah>  

In questa procedura, il primo parametro, @title_id, ha un valore predefinito di 1. Un'applicazione può usare il codice seguente per richiamare questa procedura in modo che specifichi un solo parametro dinamico. Questo parametro è un parametro denominato con il nome "@quote".

// Prepare the procedure invocation statement.  
SQLPrepare(hstmt, "{call test(?)}", SQL_NTS);  
  
// Populate record 1 of ipd.  
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR,  
                  30, 0, szQuote, 0, &cbValue);  
  
// Get ipd handle and set the SQL_DESC_NAMED and SQL_DESC_UNNAMED fields  
// for record #1.  
SQLGetStmtAttr(hstmt, SQL_ATTR_IMP_PARAM_DESC, &hIpd, 0, 0);  
SQLSetDescField(hIpd, 1, SQL_DESC_NAME, "@quote", SQL_NTS);  
  
// Assuming that szQuote has been appropriately initialized,  
// execute.  
SQLExecute(hstmt);