Freigeben über


Mehrere Ergebnisse

Ein Ergebnis ist etwas, das von der Datenquelle zurückgegeben wird, nachdem eine Anweisung ausgeführt wurde. ODBC verfügt über zwei Arten von Ergebnissen: Resultsets und Zeilenanzahl. Zeilenanzahlen sind die Anzahl der Zeilen, die von einer Aktualisierung, löschung oder einer Einfüge-Anweisung betroffen sind. Batches, die in Batches of SQL-Anweisungen beschrieben werden, können mehrere Ergebnisse generieren.

In der folgenden Tabelle sind die SQLGetInfo-Optionen aufgeführt, die eine Anwendung verwendet, um zu bestimmen, ob eine Datenquelle für jeden verschiedenen Batchtyp mehrere Ergebnisse zurückgibt. Insbesondere kann eine Datenquelle eine einzelne Zeilenanzahl für den gesamten Batch von Anweisungen oder einzelne Zeilenanzahlen für jede Anweisung im Batch zurückgeben. Im Fall einer resultsetgenerierenden Anweisung, die mit einem Array von Parametern ausgeführt wird, kann die Datenquelle ein einzelnes Resultset für alle Sätze von Parametern oder einzelnen Resultsets für jede Gruppe von Parametern zurückgeben.

Batchtyp Zeilenanzahl Resultsets
Expliziter Batch SQL_BATCH_ROW_COUNT[a] --[b]
Prozedur SQL_BATCH_ROW_COUNT[a] --[b]
Arrays von Parametern SQL_PARAM_ARRAYS_ROW_COUNTS SQL_PARAM_ARRAYS_SELECTS

[a] Zeilenzählungsanweisungen in einem Batch werden möglicherweise unterstützt, die Rückgabe der Zeilenanzahl wird jedoch nicht unterstützt. Die option SQL_BATCH_SUPPORT in SQLGetInfo gibt an, ob Zeilenanzahl-generierende Anweisungen in Batches zulässig sind. Die Option SQL_BATCH_ROW_COUNTS gibt an, ob diese Zeilenanzahl an die Anwendung zurückgegeben wird.

[b] Explizite Batches und Prozeduren geben immer mehrere Resultsets zurück, wenn sie mehrere Resultset-generierende Anweisungen enthalten.

Hinweis

Die in ODBC 1.0 eingeführte option SQL_MULT_RESULT_SETS enthält nur allgemeine Informationen darüber, ob mehrere Resultsets zurückgegeben werden können. Insbesondere wird sie auf "Y" festgelegt, wenn die SQL_BS_SELECT_EXPLICIT oder SQL_BS_SELECT_PROC Bits für SQL_BATCH_SUPPORT zurückgegeben werden oder wenn SQL_PAS_BATCH für SQL_PARAM_ARRAYS_SELECT zurückgegeben wird.

Um mehrere Ergebnisse zu verarbeiten, ruft eine Anwendung SQLMoreResults auf. Diese Funktion dis Karte das aktuelle Ergebnis und macht das nächste Ergebnis verfügbar. Sie gibt SQL_NO_DATA zurück, wenn keine weiteren Ergebnisse verfügbar sind. Angenommen, die folgenden Anweisungen werden als Batch ausgeführt:

SELECT * FROM Parts WHERE Price > 100.00;  
UPDATE Parts SET Price = 0.9 * Price WHERE Price > 100.00  

Nachdem diese Anweisungen ausgeführt wurden, ruft die Anwendung Zeilen aus dem Resultset ab, das von der SELECT-Anweisung erstellt wurde. Wenn das Abrufen von Zeilen abgeschlossen ist, ruft sie SQLMoreResults auf, um die Anzahl der Teile verfügbar zu machen, die erneut bereitgestellt wurden. Falls erforderlich, wird der Cursor von SQLMoreResults aufgehoben Karte entfernt und geschlossen. Die Anwendung ruft dann SQLRowCount auf, um zu bestimmen, wie viele Teile von der UPDATE-Anweisung rekrutiert wurden.

Es ist treiberspezifisch, ob die gesamte Batch-Anweisung ausgeführt wird, bevor Ergebnisse verfügbar sind. In einigen Implementierungen ist dies der Fall; in anderen löst das Aufrufen von SQLMoreResults die Ausführung der nächsten Anweisung im Batch aus.

Wenn eine der Anweisungen in einem Batch fehlschlägt, gibt SQLMoreResults entweder SQL_ERROR oder SQL_SUCCESS_WITH_INFO zurück. Wenn der Batch abgebrochen wurde, wenn die Anweisung fehlgeschlagen ist oder die fehlgeschlagene Anweisung die letzte Anweisung im Batch war, gibt SQLMoreResults SQL_ERROR zurück. Wenn der Batch nicht abgebrochen wurde, wenn die Anweisung fehlgeschlagen ist und die fehlgeschlagene Anweisung nicht die letzte Anweisung im Batch war, gibt SQLMoreResults SQL_SUCCESS_WITH_INFO zurück. SQL_SUCCESS_WITH_INFO gibt an, dass mindestens ein Resultset oder eine Anzahl generiert wurde und dass der Batch nicht abgebrochen wurde.