Cursor Rowset-grootte

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

ODBC-cursors zijn niet beperkt tot het ophalen van één rij tegelijk. Ze kunnen meerdere rijen ophalen in elke aanroep naar SQLFetch of SQLFetchScroll. Wanneer je werkt met een client/server-database zoals Microsoft SQL Server, is het efficiënter om meerdere rijen tegelijk op te halen. Het aantal rijen dat wordt teruggegeven bij een fetch wordt de rijsetgrootte genoemd en wordt gespecificeerd met behulp van de SQL_ATTR_ROW_ARRAY_SIZE van SQLSetStmtAttr.

SQLUINTEGER uwRowsize;  
SQLSetStmtAttr(m_hstmt, SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER)uwRowsetSize, SQL_IS_UINTEGER);  

Cursors met een rijsetgrootte groter dan 1 worden blokcursors genoemd.

Er zijn twee opties om kolommen van resultaatsets voor blokcursors te binden:

  • Kolomgebonden binding

    Elke kolom is gebonden aan een array van variabelen. Elke array heeft hetzelfde aantal elementen als de grootte van de rijset.

  • Rijsgewijs binden

    Een array wordt opgebouwd met structuren die de gegevens en indicatoren voor alle kolommen in een rij bevatten. De array heeft hetzelfde aantal structuren als de grootte van de rijset.

Wanneer kolom- of rijgewijze binding wordt gebruikt, vult elke aanroep naar SQLFetch of SQLFetchScroll de gebonden arrays met gegevens uit de opgehaalde rijset.

SQLGetData kan ook worden gebruikt om kolomgegevens van een blokcursor op te halen. Omdat SQLGetData één rij tegelijk werkt, moet SQLSetPos worden aangeroepen om een specifieke rij in de rijset als de huidige rij in te stellen voordat SQLGetData wordt aanroepen.

De SQL Server Native Client ODBC-driver biedt een optimalisatie met behulp van rijsets om snel een volledige resultaatset op te halen. Om deze optimalisatie te gebruiken, stel je de cursorattributen in op hun standaardwaarden (alleen vooruit, alleen-lezen, rijsetgrootte = 1) op het moment dat SQLExecDirect of SQLExecute wordt aangeroepen. De SQL Server Native Client ODBC-driver stelt een standaard resultaatset op. Dit is efficiënter dan servercursors bij het overzetten van resultaten naar de client zonder scrollen. Nadat de instructie is uitgevoerd, vergroot je de rijsetgrootte en gebruik je kolom- of rijgebonden binding. Hierdoor kan SQL Server een standaardresultaatset gebruiken om resultaatrijen efficiënt naar de client te sturen, terwijl de SQL Server Native Client ODBC-driver continu rijen uit de netwerkbuffers van de client haalt.