Schnelle Vorwärtscursor (ODBC)
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Wenn eine Verbindung mit einer Instanz von SQL Server hergestellt wird, unterstützt der ODBC-Treiber von SQL Server Native Client Leistungsoptimierungen für vorwärtsgerichtete, schreibgeschützte Cursor. Schnelle Vorwärtscursor werden vom Treiber und Server intern auf ganz ähnliche Weise implementiert wie Standardresultsets. Neben einer hohen Leistungsfähigkeit besitzen schnelle Vorwärtscursor auch folgende Eigenschaften:
SQLGetData wird nicht unterstützt. Die Resultsetspalten müssen an Programmvariablen gebunden sein.
Wenn der Server auf das Ende des Cursors stößt, wird der Cursor automatisch geschlossen. Die Anwendung muss weiterhin SQLCloseCursor oder SQLFreeStmt(SQL_CLOSE) aufrufen, aber der Treiber muss die Close-Anforderung nicht an den Server senden. Damit wird ein Roundtrip durch das Netzwerk zum Server eingespart.
Anwendungen fordern mit dem treiberspezifischen Anweisungsattribut SQL_SOPT_SS_CURSOR_OPTIONS schnelle Vorwärtscursor an. Wenn dieses auf SQL_CO_FFO festgelegt wird, werden schnelle Vorwärtscursor ohne die automatische Abrufoption aktiviert. Wenn es auf SQL_CO_FFO_AF festgelegt wird, wird auch die automatische Abrufoption aktiviert. Weitere Informationen zum AutoFetch finden Sie unter Verwenden von AutoFetch mit ODBC-Cursorn.
Schnelle Vorwärtscursor mit automatischer Abrufoption können eingesetzt werden, um kleine Resultsets mit nur einem Roundtrip zum Server abzurufen. In diesen Schritten ist n die Anzahl der zurückzugebenden Zeilen:
Legen Sie SQL_SOPT_SS_CURSOR_OPTIONS auf SQL_CO_FFO_AF fest.
Legen Sie SQL_ATTR_ROW_ARRAY_SIZE auf n + 1 fest.
Binden Sie die Ergebnisspalten an Arrays von n + 1 Elementen (um sicher zu sein, wenn n + 1 Zeilen tatsächlich abgerufen werden).
Öffnen Sie den Cursor mit SQLExecDirect oder SQLExecute.
Wenn der Rückgabestatus SQL_SUCCESS ist, rufen Sie SQLFreeStmt oder SQLCloseCursor auf, um den Cursor zu schließen. Alle Daten für die Zeilen sind in den gebundenen Programmvariablen enthalten.
Mit diesen Schritten sendet sqlExecDirect oder SQLExecute eine Cursor-geöffnete Anforderung mit aktivierter AutoFetch-Option. Auf diese einzelne Anforderung vom Client, führt der Server Folgendes aus:
Er öffnet den Cursor.
Er erstellt das Resultset und sendet die Zeilen an den Client.
Weil die Rowsetgröße auf einen Wert festgelegt wurde, der um 1 größer als die Anzahl der Resultsetzeilen ist, erkennt der Server das Ende des Cursors und schließt den Cursor.