Binden von Parametermarkern

Die Anwendung bindet Parameter durch Aufrufen von SQLBindParameter. SQLBindParameter bindet jeweils einen Parameter. Damit gibt die Anwendung Folgendes an:

  • Die Parameternummer. Parameter werden in zunehmender Parameterreihenfolge in der SQL-Anweisung nummeriert, beginnend mit der Zahl 1. Obwohl es zulässig ist, eine Parameternummer anzugeben, die höher als die Anzahl der Parameter in der SQL-Anweisung ist, wird der Parameterwert ignoriert, wenn die Anweisung ausgeführt wird.

  • Der Parametertyp (Eingabe, Eingabe/Ausgabe oder Ausgabe). Mit Ausnahme von Parametern in Prozeduraufrufen sind alle Parameter Eingabeparameter. Weitere Informationen finden Sie unter Prozedurparameter weiter unten in diesem Abschnitt.

  • Der Datentyp C, die Adresse und die Bytelänge der Variablen, die an den Parameter gebunden sind. Der Treiber muss in der Lage sein, die Daten aus dem C-Datentyp in den SQL-Datentyp zu konvertieren, oder ein Fehler wird zurückgegeben. Eine Liste der unterstützten Konvertierungen finden Sie unter Konvertieren von Daten aus C in SQL-Datentypen in Anhang D: Datentypen.

  • Der SQL-Datentyp, die Genauigkeit und die Skalierung des Parameters selbst.

  • Die Adresse eines Längen-/Indikatorpuffers. Sie stellt die Bytelänge von Binären oder Zeichendaten bereit, gibt an, dass die Daten NULL sind, oder gibt an, dass die Daten mit SQLPutData gesendet werden. Weitere Informationen finden Sie unter Verwenden von Längen-/Indikatorwerten.

Der folgende Code bindet beispielsweise "SalesPerson" und "CustID" an Parameter für die Spalten "SalesPerson" und "CustID". Da SalesPerson Zeichendaten enthält, die variable Länge ist, gibt der Code die Bytelänge von SalesPerson (11) an und bindet SalesPersonLenOrInd an die Bytelänge der Daten in SalesPerson. Diese Informationen sind für CustID nicht erforderlich, da sie ganzzahlige Daten enthält, die eine feste Länge aufweisen.

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);  

Wenn SQLBindParameter aufgerufen wird, speichert der Treiber diese Informationen in der Struktur für die Anweisung. Wenn die Anweisung ausgeführt wird, werden die Informationen verwendet, um die Parameterdaten abzurufen und an die Datenquelle zu senden.

Hinweis

In ODBC 1.0 wurden Parameter mit SQLSetParam gebunden. Der Treiber-Manager ordnet Aufrufe zwischen SQLSetParam und SQLBindParameter zu, abhängig von den Versionen von ODBC, die von der Anwendung und dem Treiber verwendet werden.