Vorbereitete Anweisungen bieten Performance-Vorteile bei häufig benutzten Anweisungen. ODBC bietet eine vollständige Menge von Funktionen für vorbereitete Anweisungen.
Bereiten Sie die Anweisung mit SQLPrepare vor.
Das folgende Codefragment veranschaulicht z.B., wie eine INSERT-Anweisung vorbereitet wird:
SQLRETURN retcode; SQLHSTMT stmt; retcode = SQLPrepare( stmt, "INSERT INTO Departments ( DepartmentID, DepartmentName, DepartmentHeadID ) VALUES (?, ?, ?,)", SQL_NTS); |
In diesem Beispiel gilt:
retcode Enthält einen Rückgabecode, der auf Erfolg oder Fehlschlag des Vorgangs überprüft werden sollte
stmt Liefert ein Handle zu der Anweisung, sodass sie später referenziert werden kann.
? Die Fragezeichen sind Platzhalter für Anweisungsparameter. Ein Platzhalter wird in die Anweisung eingefügt, um anzuzeigen, wo auf Hostvariablen zugegriffen werden soll. Ein Platzhalter ist entweder ein Fragezeichen (?) oder eine Referenz auf eine Hostvariable wie in statischen Anweisungen (ein Hostvariablenname mit einem vorangestellten Doppelpunkt). Im letzteren Fall dient der Name der Hostvariable, der im Text der Anweisung benutzt wird, nur als Platzhalter für eine Referenz auf den SQL-Deskriptorbereich. Er muss nicht mit dem tatsächlichen Parameternamen übereinstimmen.
Legen Sie die Werte der Anweisungsparameter mit SQLBindParameter fest.
Der folgende Funktionsaufruf zum Beispiel belegt den Wert der Variablen DepartmentID:
SQLBindParameter( stmt, 1, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, &sDeptID, 0, &cbDeptID); |
In diesem Beispiel gilt:
stmt ist das Anweisungs-Handle.
1 zeigt an, dass dieser Aufruf den ersten Platzhalter mit einem Wert belegt.
SQL_PARAM_INPUT zeigt an, dass der Parameter eine Eingabeanweisung ist.
SQL_C_SHORT zeigt den C-Datentyp an, der in der Anwendung verwendet wird.
SQL_INTEGER zeigt den SQL-Datentyp an, der in der Datenbank verwendet wird.
Die nächsten beiden Parameter zeigen die Spaltengröße und die Anzahl der Dezimalstellen an: beide sind mit 0 (Null) für Ganzzahlen belegt.
&sDeptID ist ein Zeiger auf einen Puffer für den Parameterwert.
0 gibt die Länge des Puffers in Byte an.
&cbDeptID ist ein Zeiger auf einen Puffer für die Länge des Parameterwerts.
Binden Sie die beiden anderen Parameter, und weisen Sie sDeptId Werte zu.
Führen Sie die Anweisung aus:
retcode = SQLExecute( stmt); |
Schritte 2 bis 4 können mehrfach ausgeführt werden.
Löschen Sie die Anweisung.
Das Löschen der Anweisung setzt die der Anweisung zugewiesenen Ressourcen frei. Anweisungen werden mit SQLFreeHandle gelöscht.
Ein vollständiges Beispiel mit Fehlerprüfung finden Sie in %SQLANYSAMP12%\SQLAnywhere\ODBCPrepare\odbcprepare.cpp.
Weitere Hinweise zu SQLPrepare finden Sie unter "SQLPrepare" in der Microsoft-Dokumentation ODBC API Reference unter http://msdn.microsoft.com/de-de/library/ms710926.aspx.
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |