Share via


Binden von Parametern

Jede Parametermarkierung in einer SQL-Anweisung muss mit einer Variablen in der Anwendung verknüpft oder an diese gebunden werden, bevor die Anweisung ausgeführt wird. Hierzu wird die SQLBindParameter-Funktion aufgerufen. SQLBindParameter beschreibt die Programmvariable (Adresse, C-Datentyp usw.) zum Treiber. Ferner identifiziert sie die Parametermarkierung durch Angabe ihres Ordinalwerts und beschreibt anschließend die Eigenschaften des SQL-Objekts, das sie darstellt (SQL-Datentyp, Genauigkeit usw.).

Parametermarkierungen können vor der Ausführung einer Anweisung jederzeit gebunden bzw. neu gebunden werden. Eine Parameterbindung bleibt wirksam, bis eines der folgenden Ereignisse eintritt:

  • Ein Aufruf von SQLFreeStmt, wobei der Option-Parameter auf SQL_RESET_PARAMS festgelegt ist, gibt alle an das Anweisungshandle gebundenen Parameter frei.

  • Ein Aufruf von SQLBindParameter, wobei für ParameterNumber die Ordinalzahl einer gebundenen Parametermarkierung festgelegt ist, löst automatisch die vorherige Bindung auf.

Eine Anwendung kann ferner Parameter an Arrays von Programmvariablen binden, um eine SQL-Anweisung batchweise zu verarbeiten. Es gibt zwei Arten der Arraybindung:

  • Die spaltenweise Bindung ist fertig gestellt, wenn jeder einzelne Parameter an sein eigenes Array von Variablen gebunden wurde.

    Die spaltenweise Bindung wird angegeben, indem SQLSetStmtAttr aufgerufen wird, wobei Attribute auf SQL_ATTR_PARAM_BIND_TYPE und ValuePtr auf SQL_PARAM_BIND_BY_COLUMN festgelegt wird.

  • Die zeilenweise Beendung ist fertig gestellt, wenn alle Parameter in der SQL-Anweisung als Einheit an ein Array von Strukturen gebunden wurden, die die einzelnen Variablen für die Parameter enthalten.

    Die zeilenweise Bindung wird angegeben, indem SQLSetStmtAttr aufgerufen wird, wobei Attribute auf SQL_ATTR_PARAM_BIND_TYPE und ValuePtr auf die Größe der Struktur festgelegt wird, welche die Programmvariablen enthält.

Wenn der SQL Server Native Client ODBC-Treiber Zeichen- oder Binärzeichenfolgen-Parameter an den Server sendet, werden die Werte bis zu der im Parameter SQLBindParameter ColumnSize angegebenen Länge aufgefüllt. Wenn eine ODBC 2.x-Anwendung für ColumnSize den Wert 0 angibt, füllt der Treiber den Parameter bis zur Genauigkeit des Datentyps auf. Die Genauigkeit beträgt bei einer Verbindung zu SQL Server 8000, bei einer Verbindung zu älteren Versionen von SQL Server 255. ColumnSize ist für variant-Spalten in Byte.

SQL Server unterstützt definierende Namen für gespeicherte Prozedurparameter. ODBC 3.5 hat ebenfalls Unterstützung für benannte Parameter eingeführt, die verwendet werden, wenn in SQL Server gespeicherte Prozeduren aufgerufen werden. Diese Unterstützung kann für Folgendes verwendet werden:

  • Zum Aufrufen einer gespeicherten Prozedur und Eingeben von Werten für eine Teilmenge der für die gespeicherte Prozedur definierten Parameter

  • Zum Angeben der Parameter in einer anderen Reihenfolge in der Anwendung als in der Reihenfolge, in der sie bei der Erstellung der gespeicherten Prozedur angegeben wurden

Benannte Parameter werden nur unterstützt, wenn zum Ausführen einer gespeicherten Prozedur die Transact-SQLEXECUTE-Anweisung oder die ODBC CALL-Escapesequenz verwendet wird.

Wenn SQL_DESC_NAME für einen gespeicherten Prozedurparameter festgelegt wird, sollten alle gespeicherten Prozedurparameter in der Abfrage ebenfalls SQL_DESC_NAME festlegen.  Wenn Literale in gespeicherten Prozeduraufrufen (z. B., @p1) verwendet werden, in denen Parameter über SQL_DESC_NAME-Satz verfügen, sollten die Literale das Format'name verwenden =value', wobei name der Parametername der gespeicherten Prozedur ist. Weitere Informationen finden Sie unter Bindungsparameter von Namen (Parameter genannt).