Wurde ein Resultset erstellt?
In den meisten Fällen wissen Anwendungsprogrammierer, ob die anweisungen, die ihre Anwendung ausführt, ein Resultset erstellen. Dies ist der Fall, wenn die Anwendung hartcodierte SQL-Anweisungen verwendet, die vom Programmierer geschrieben wurden. Es ist in der Regel der Fall, wenn die Anwendung SQL-Anweisungen zur Laufzeit erstellt: Der Programmierer kann problemlos Code enthalten, der kennzeichnet, ob eine SELECT-Anweisung oder eine INSERT-Anweisung erstellt wird. In einigen Situationen kann der Programmierer nicht wissen, ob eine Anweisung ein Resultset erstellt. Dies gilt, wenn die Anwendung dem Benutzer die Möglichkeit bietet, eine SQL-Anweisung einzugeben und auszuführen. Es gilt auch, wenn die Anwendung zur Laufzeit eine Anweisung erstellt, um eine Prozedur auszuführen.
In solchen Fällen ruft die Anwendung SQLNumResultCols auf, um die Anzahl der Spalten im Resultset zu bestimmen. Wenn dies 0 ist, hat die Anweisung kein Resultset erstellt. Wenn es sich um eine andere Zahl handelt, hat die Anweisung ein Resultset erstellt.
Die Anwendung kann SQLNumResultCols jederzeit aufrufen, nachdem die Anweisung vorbereitet oder ausgeführt wurde. Da einige Datenquellen jedoch nicht einfach die Resultsets beschreiben können, die von vorbereiteten Anweisungen erstellt werden, leidet die Leistung, wenn SQLNumResultCols aufgerufen wird, nachdem eine Anweisung vorbereitet wurde, aber bevor sie ausgeführt wird.
Einige Datenquellen unterstützen auch die Bestimmung der Anzahl von Zeilen, die eine SQL-Anweisung in einem Resultset zurückgibt. Dazu ruft die Anwendung SQLRowCount auf. Genau das, was die Zeilenanzahl darstellt, wird durch die Einstellung der option SQL_DYNAMIC_CURSOR_ATTRIBUTES2, SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2, SQL_KEYSET_CURSOR_ATTRIBUTES2 oder SQL_STATIC_CURSOR_ATTRIBUTES2 (abhängig vom Cursortyp) angegeben, die von einem Aufruf von SQLGetInfo zurückgegeben wird. Diese Bitmaske gibt für jeden Cursortyp an, ob die zurückgegebene Zeilenanzahl exakt, ungefähr oder gar nicht verfügbar ist. Ob Zeilenanzahlen für statische oder keysetgesteuerte Cursor von Änderungen betroffen sind, die über SQLBulkOperations oder SQLSetPos oder durch positionierte Aktualisierungs- oder Löschanweisungen vorgenommen wurden, hängt von anderen Bits ab, die von den gleichen Zuvor aufgeführten Optionsargumenten zurückgegeben werden. Weitere Informationen finden Sie in der Beschreibung der SQLGetInfo-Funktion .