Share via


Verwenden von SQL Server-Standardresultsets

Die standardmäßigen ODBC-Cursorattribute sind:

SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, SQL_CURSOR_FORWARD_ONLY, SQL_IS_INTEGER);
SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, SQL_CONCUR_READ_ONLY, SQL_IS_INTEGER);
SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_ARRAY_SIZE, 1, SQL_IS_INTEGER);

Wenn diese Attribute auf ihre Standardwerte festgelegt sind, verwendet der SQL Server Native Client-ODBC-Treiber ein SQL Server-Standardresultset. Standardresultsets können für beliebige, von SQL Server unterstützte SQL-Anweisungen verwendet werden und stellen die effizienteste Methode für die Übertragung des gesamten Resultsets an den Client dar.

Mit SQL Server 2005 wurde die Unterstützung für MARS (Multiple Active Result Sets) eingeführt, sodass Anwendungen nun über mehrere aktive Standardresultsets pro Verbindung verfügen können. MARS ist standardmäßig nicht aktiviert.

Vor SQL Server 2005 unterstützten Standardresultsets nicht mehrere aktive Anweisungen über die gleiche Verbindung. Nach der Ausführung einer SQL-Anweisung über eine Verbindung akzeptiert der Server keine Befehle vom Client für diese Verbindung (außer der Anforderung zum Abbrechen des restlichen Resultsets), bis alle Zeilen im Resultset verarbeitet wurden. Rufen Sie zum Abbrechen des verbleibenden Inhalts eines teilweise verarbeiteten Resultsets SQLCloseCursor oder SQLFreeStmt mit dem auf SQL_CLOSE festgelegten fOption-Parameter auf. Rufen Sie SQLMoreResults auf, um ein teilweise verarbeitetes Resultset zu beenden und zu überprüfen, ob ein weiteres Resultset vorhanden ist. Wenn eine ODBC-Anwendung versucht, einen Befehl für ein Verbindungshandle auszuführen, bevor ein Standardresultset vollständig verarbeitet wurde, generiert der Aufruf SQL_ERROR, und ein Aufruf von SQLGetDiagRec gibt Folgendes zurück:

szSqlState: "HY000", pfNativeError: 0
szErrorMsg: "[Microsoft][SQL Server Native Client]
                Connection is busy with results for another hstmt."

Siehe auch

Konzepte