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.