Share via


Festlegen von Parameterwerten

Um den Wert eines Parameters festzulegen, legt die Anwendung einfach den Wert der Variablen fest, die an den Parameter gebunden ist. Es ist nicht wichtig, wenn dieser Wert festgelegt wird, solange er vor der Ausführung der Anweisung festgelegt wird. Die Anwendung kann den Wert vor oder nach der Bindung der Variablen festlegen und den Wert beliebig oft ändern. Wenn die Anweisung ausgeführt wird, ruft der Treiber einfach den aktuellen Wert der Variablen ab. Dies ist besonders nützlich, wenn eine vorbereitete Anweisung mehrmals ausgeführt wird; die Anwendung legt bei jeder Ausführung der Anweisung neue Werte für einige oder alle Variablen fest. Ein Beispiel hierfür finden Sie weiter oben in diesem Abschnitt unter "Vorbereitete Ausführung".

Wenn ein Längen-/Indikatorpuffer im Aufruf von SQLBindParameter gebunden wurde, muss er auf einen der folgenden Werte festgelegt werden, bevor die Anweisung ausgeführt wird:

  • Die Bytelänge der Daten in der gebundenen Variablen. Der Treiber überprüft diese Länge nur, wenn die Variable Zeichen oder Binärwerte ist (ValueType ist SQL_C_CHAR oder SQL_C_BINARY).

  • SQL_NTS. Die Daten sind eine mit Null beendete Zeichenfolge.

  • SQL_NULL_DATA. Der Datenwert ist NULL, und der Treiber ignoriert den Wert der gebundenen Variablen.

  • SQL_DATA_AT_EXEC oder das Ergebnis des SQL_LEN_DATA_AT_EXEC Makros. Der Wert des Parameters wird mit SQLPutData gesendet. Weitere Informationen finden Sie unter Senden langer Daten weiter unten in diesem Abschnitt.

Die folgende Tabelle enthält die Werte der gebundenen Variablen und den Längen-/Indikatorpuffer, den die Anwendung für eine Vielzahl von Parameterwerten festlegt.

Parameter

value
Parameter

(SQL)

Datentyp
Variable (C)

Datentyp
Wert in

Begrenzung

-Variable
Wert in

Länge/Indikator

buffer[d]
"ABC" SQL_CHAR SQL_C_CHAR ABC\0[a] SQL_NTS oder 3
10 SQL_INTEGER SQL_C_SLONG 10 --
10 SQL_INTEGER SQL_C_CHAR 10\0[a] SQL_NTS oder 2
1.00 Uhr SQL_TYPE_TIME SQL_C_TYPE_TIME 13,0,0[b] --
1.00 Uhr SQL_TYPE_TIME SQL_C_CHAR {t '13:00:00'}\0[a], [c] SQL_NTS oder 14
NULL SQL_SMALLINT SQL_C_SSHORT -- SQL_NULL_DATA

[a] "\0" stellt ein Null-Beendigungszeichen dar. Das Nullendpunktzeichen ist nur erforderlich, wenn der Wert im Längen-/Indikatorpuffer SQL_NTS ist.

[b] Die Zahlen in dieser Liste sind die Zahlen, die in den Feldern der TIME_STRUCT Struktur gespeichert sind.

[c] Die Zeichenfolge verwendet die ODBC-Datums-Escapeklausel. Weitere Informationen finden Sie unter Datums-, Uhrzeit- und Zeitstempelliteralen.

[d] Treiber müssen diesen Wert immer überprüfen, um festzustellen, ob es sich um einen speziellen Wert handelt, z. B. SQL_NULL_DATA.

Die Funktionsweise eines Treibers mit einem Parameterwert zur Ausführungszeit ist treiberabhängig. Bei Bedarf konvertiert der Treiber den Wert aus dem C-Datentyp und die Bytelänge der gebundenen Variablen in den SQL-Datentyp, die Genauigkeit und den Maßstab des Parameters. In den meisten Fällen sendet der Treiber dann den Wert an die Datenquelle. In einigen Fällen wird der Wert als Text formatiert und in die SQL-Anweisung eingefügt, bevor die Anweisung an die Datenquelle gesendet wird.