Condividi tramite


Marcatori di parametri vincolanti

L'applicazione associa i parametri chiamando SQLBindParameter. SQLBindParameter associa un parametro alla volta. Al suo interno, l'applicazione specifica quanto segue:

  • Numero di parametro. I parametri vengono numerati nell'ordine dei parametri crescente nell'istruzione SQL, a partire dal numero 1. Sebbene sia legale specificare un numero di parametro superiore al numero di parametri nell'istruzione SQL, il valore del parametro verrà ignorato quando viene eseguita l'istruzione.

  • Tipo di parametro (input, input/output o output). Ad eccezione dei parametri nelle chiamate di routine, tutti i parametri sono parametri di input. Per altre informazioni, vedere Parametri della procedura più avanti in questa sezione.

  • Il tipo di dati C, l'indirizzo e la 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 viene restituito un errore. Per un elenco delle conversioni supportate, vedere Conversione di dati da C a tipi di dati SQL nell'Appendice D: Tipi di dati.

  • Tipo di dati SQL, precisione e scala del parametro stesso.

  • 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 per le colonne SalesPerson e CustID. Poiché SalesPerson contiene dati di tipo carattere, ovvero lunghezza variabile, il codice specifica la lunghezza in byte di SalesPerson (11) e associa SalesPersonLenOrInd per contenere la lunghezza in byte dei dati in SalesPerson. Queste informazioni non sono necessarie per CustID perché contengono dati integer, ovvero di 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 per l'istruzione . Quando l'istruzione viene eseguita, usa le informazioni per recuperare i dati dei parametri e inviarli all'origine dati.

Annotazioni

In ODBC 1.0 i parametri sono stati associati a SQLSetParam. Gestione driver esegue il mapping delle chiamate tra SQLSetParam e SQLBindParameter, a seconda delle versioni di ODBC usate dall'applicazione e dal driver.