Blockcursor
Viele Anwendungen verbringen viel Zeit damit, Daten über das Netzwerk hinweg zu bringen. Ein Teil dieser Zeit wird tatsächlich damit verbracht, die Daten über das Netzwerk hinweg zu bringen, und ein Teil davon wird für den Netzwerkaufwand aufgewendet, z. B. der vom Treiber getätigte Anruf, um eine Datenzeile anzufordern. Letztere Zeit kann verkürzt werden, wenn die Anwendung effiziente Block- oder Fettcursor verwendet, die mehr als eine Zeile auf einmal zurückgeben können.
Eine Anwendung hat immer die Möglichkeit, einen Blockcursor zu verwenden. In Datenquellen, aus denen jeweils nur eine Zeile abgerufen werden kann, müssen Blockcursor im Treiber simuliert werden. Dies kann durch Ausführen mehrerer Einzeilenabrufe erfolgen. Auch wenn dies wahrscheinlich keine Leistungssteigerung mit sich bringt, eröffnet es doch neue Möglichkeiten für Anwendungen. Solche Anwendungen werden dann Leistungssteigerungen erfahren, wenn DBMSs Blockcursor nativ implementieren und die mit diesen DBMSs verbundenen Treiber sie verfügbar machen.
Die Zeilen, die in einem einzigen Fetch mit einem Blockcursor zurückgegeben werden, werden als Rowset bezeichnet. Es ist wichtig, das Rowset nicht mit dem Resultset zu verwechseln. Das Resultset wird an der Datenquelle verwaltet, während das Rowset in Anwendungspuffern verwaltet wird. Während das Resultset fest ist, ist das Rowset nicht fest – es ändert seine Position und seinen Inhalt jedes Mal, wenn ein neues Set von Zeilen abgerufen wird. So wie ein einzeiliger Cursor wie der traditionelle SQL-Vorwärtscursor auf eine aktuelle Zeile zeigt, zeigt ein Blockcursor auf das Rowset, das man sich als aktuelle Zeilen vorstellen kann.
Um Operationen auszuführen, die eine einzelne Zeile bearbeiten, wenn mehrere Zeilen abgerufen wurden, muss die Anwendung zunächst angeben, welche Zeile die aktuelle Zeile ist. Die aktuelle Zeile wird durch Aufrufe von SQLGetData und positionierten Aktualisierungs- und Löschanweisungen benötigt. Wenn ein Blockcursor zuerst ein Rowset zurückgibt, ist die aktuelle Zeile die erste Zeile des Rowsets. Um die aktuelle Zeile zu ändern, ruft die Anwendung SQLSetPos oder SQLBulkOperations (zur Aktualisierung nach Lesezeichen) auf. Die folgende Illustration zeigt die Beziehung des Resultsets, des Rowsets, der aktuellen Zeile, des Rowset-Cursors und des Blockcursors. Weitere Informationen finden Sie unter Verwenden von Blockcursors weiter unten in diesem Abschnitt sowie positionierte Aktualisierungs- und Löschanweisungen und Aktualisieren von Daten mit SQLSetPos.
Gibt an, ob ein Cursor ein Blockcursor ist, unabhängig davon, ob er scrollbar ist. In einer Berichtsanwendung wird beispielsweise der größte Teil der Arbeit mit dem Abrufen und Drucken von Zeilen verbracht. Aus diesem Grund funktioniert es am besten mit einem Blockcursor, der nur vorwärts läuft. Es verwendet einen reinen Vorwärtscursor, um die Kosten für einen scrollbaren Cursor zu vermeiden, und einen Blockcursor, um den Netzwerkverkehr zu reduzieren.
In diesem Abschnitt werden die folgenden Themen behandelt: