Share via


Verwenden von SQL Server-Standardresultsets

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

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 Standardergebnisset. Standardergebnissätze können für jede SQL-Anweisung verwendet werden, die von SQL Server unterstützt wird, und sind die effizienteste Methode zum Übertragen eines gesamten Resultsets an den Client.

SQL Server 2005 (9.x) wurde unterstützung für mehrere aktive Resultsets (MARS) eingeführt. Anwendungen können jetzt mehr als einen aktiven Standardergebnissatz pro Verbindung aufweisen. MARS ist standardmäßig nicht aktiviert.

Vor SQL Server 2005 (9.x) unterstützten Standardergebnissätze nicht mehrere aktive Anweisungen für dieselbe 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. Um den Rest eines teilweise verarbeiteten Resultsets abzubrechen, rufen Sie SQLCloseCursor oder SQLFreeStmt auf, wobei der fOption-Parameter auf SQL_CLOSE festgelegt ist. Rufen Sie SQLMoreResults auf, um ein teilweise verarbeitetes Resultset abzuschließen und auf das Vorhandensein eines anderen Resultsets zu testen. Wenn eine ODBC-Anwendung einen Befehl für ein Verbindungshandle versucht, bevor ein Standardergebnissatz vollständig verarbeitet wurde, generiert der Aufruf SQL_ERROR und ein Aufruf von SQLGetDiagRec gibt zurück:

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

Weitere Informationen

Implementieren von Cursorn