Anweisungshandles

Eine Anweisung wird am einfachsten als SQL-Anweisung betrachtet, z . B. SELECT * FROM Employee. Eine Anweisung ist jedoch mehr als nur eine SQL-Anweisung – sie besteht aus allen Informationen, die dieser SQL-Anweisung zugeordnet sind, z. B. alle Resultsets, die von der Anweisung und den Parametern erstellt wurden, die bei der Ausführung der Anweisung verwendet werden. Eine Anweisung muss nicht einmal über eine anwendungsdefinierte SQL-Anweisung verfügen. Wenn beispielsweise eine Katalogfunktion wie SQLTables für eine Anweisung ausgeführt wird, wird eine vordefinierte SQL-Anweisung ausgeführt, die eine Liste von Tabellennamen zurückgibt.

Jede Anweisung wird durch ein Anweisungshandle identifiziert. Eine Anweisung ist einer einzelnen Verbindung zugeordnet, und es können mehrere Anweisungen für diese Verbindung vorhanden sein. Einige Faktoren begrenzen die Anzahl aktiver Anweisungen, die sie unterstützen; die option SQL_MAX_CONCURRENT_ACTIVITIES in SQLGetInfo gibt an, wie viele aktive Anweisungen ein Treiber für eine einzelne Verbindung unterstützt. Eine Anweisung ist so definiert, dass sie aktiv ist, wenn ergebnisse ausstehen, wobei Ergebnisse entweder ein Resultset oder die Anzahl von Zeilen sind, die von einer INSERT-, UPDATE- oder DELETE-Anweisung betroffen sind, oder Daten mit mehreren Aufrufen von SQLPutData gesendet werden.

Innerhalb eines Codeabschnitts, der ODBC (Treiber-Manager oder treiber) implementiert, identifiziert das Anweisungshandle eine Struktur, die Anweisungsinformationen enthält, z. B.:

  • Der Status der Anweisung

  • Die aktuelle Diagnose auf Anweisungsebene

  • Die Adressen der Anwendungsvariablen, die an die Parameter und Resultsetspalten der Anweisung gebunden sind

  • Die aktuellen Einstellungen der einzelnen Anweisungsattribute

Anweisungshandles werden in den meisten ODBC-Funktionen verwendet. Insbesondere werden sie in den Funktionen verwendet, um Parameter und Resultsetspalten (SQLBindParameter und SQLBindCol), Vorbereiten und Ausführen von Anweisungen (SQLPrepare, SQLExecute und SQLExecDirect), Abrufen von Metadaten (SQLColAttribute und SQLDescribeCol), Abrufen von Ergebnissen (SQLFetch) und Abrufen der Diagnose (SQLGetDiagField und SQLGetDiagRec). Sie werden auch in Katalogfunktionen (SQLColumns, SQLTables usw.) und einer Reihe anderer Funktionen verwendet.

Anweisungshandles werden sqlAllocHandle zugeordnet und mit SQLFreeHandle freigegeben.