Delen via


Cursors blokkeren

Veel toepassingen besteden veel tijd aan het overbrengen van gegevens in het netwerk. Een deel van deze tijd wordt daadwerkelijk besteed aan het overbrengen van de gegevens in het netwerk en een deel ervan wordt besteed aan netwerkoverhead, zoals de oproep van het stuurprogramma om een rij gegevens aan te vragen. De laatstgenoemde tijd kan worden verminderd als de toepassing efficiënt gebruikmaakt van block of fat cursors, die meer dan één rij tegelijk kunnen retourneren.

Een toepassing heeft altijd de mogelijkheid om een blokcursor te gebruiken. In gegevensbronnen waaruit slechts één rij tegelijk kan worden opgehaald, moeten blokcursors in het stuurprogramma worden gesimuleerd. Dit kan worden gedaan door meerdere enkele-rij-ophalingen uit te voeren. Hoewel dit onwaarschijnlijk is dat dit prestatieverbeteringen oplevert, worden er mogelijkheden voor toepassingen geopend. Dergelijke toepassingen zullen vervolgens prestatieverbeteringen ervaren, omdat DBMSs blokcursors in eigen formaat implementeren en de bijbehorende stuurprogramma's deze blokkursors beschikbaar stellen.

De rijen die in één keer worden opgehaald met een blokcursor, worden de rijenset genoemd. Het is belangrijk om de rijenset niet te verwarren met de resultatenset. De resultatenset wordt bijgehouden in de gegevensbron, terwijl de rijenset wordt onderhouden in toepassingsbuffers. Hoewel de resultaatset vast staat, verandert de rijset van positie en inhoud telkens wanneer een nieuwe set rijen wordt opgehaald. Net als een één-rij cursor, zoals de traditionele SQL cursor die alleen vooruit wijst naar een huidige rij, wijst een blokcursor naar de rijenset, die kan worden beschouwd als huidige rijen.

Als u bewerkingen wilt uitvoeren die op één rij worden uitgevoerd wanneer meerdere rijen zijn opgehaald, moet de toepassing eerst aangeven welke rij de huidige rij is. De huidige rij is vereist voor aanroepen naar SQLGetData en positioned update- en verwijderinstructies. Wanneer een blokcursor eerst een rijset retourneert, is de huidige rij de eerste rij van de rijenset. Als u de huidige rij wilt wijzigen, roept de toepassing SQLSetPos of SQLBulkOperations aan (om bij te werken aan de hand van bladwijzer). In de volgende afbeelding ziet u de relatie tussen de resultatenset, de rijset, de huidige rij, de cursor van de rijset en de blokcursor. Zie voor meer informatie Block Cursors gebruiken, verderop in deze sectie, en Geplaatste Update- en Verwijderinstructies en Gegevens bijwerken met SQLSetPos.

Volgende, Vorige, Eerste en Laatste rijensets ophalen

Of een cursor een blokcursor is, is onafhankelijk van of deze kan worden geschoven. Het grootste deel van het werk in een rapporttoepassing wordt bijvoorbeeld besteed aan het ophalen en afdrukken van rijen. Hierdoor werkt het het snelst met een forward-only blokcursor. Er wordt een cursor die alleen vooruit kan gebruikt om de kosten van een scrollbare cursor te vermijden, en een blokcursor om het netwerkverkeer te verminderen.

Deze sectie bevat de volgende onderwerpen.