Teilen über


Verwenden von SQL Server-Standardresultsets

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL verwaltete Instanz Azure Synapse Analytics Analytics 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 einen SQL Server-Standardergebnissatz. 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) hat Unterstützung für mehrere aktive Resultsets (MARS) eingeführt; Anwendungen können jetzt mehr als einen aktiven Standardergebnissatz pro Verbindung haben. MARS ist standardmäßig nicht aktiviert.

Vor SQL Server 2005 (9.x) wurden mehrere aktive Anweisungen für dieselbe Verbindung nicht unterstützt. 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 zu testen, um das Vorhandensein eines anderen Resultsets zu testen. Wenn eine ODBC-Anwendung versucht, einen Befehl auf einem Verbindungshandle auszuführen, bevor ein Standardergebnissatz 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."  

Weitere Informationen

Implementieren von Cursorn