Snelle Forward-Only Cursors (ODBC)

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

Wanneer verbonden met een instantie van SQL Server, ondersteunt de SQL Server Native Client ODBC-driver prestatieoptimalisaties voor forward-only, read-only cursors. Fast-forward-only cursors worden intern geïmplementeerd door de driver en server op een manier die sterk lijkt op standaardresultaten. Naast hoge prestaties hebben alleen snel-vooruit cursors ook de volgende kenmerken:

  • SQLGetData wordt niet ondersteund. De kolommen van de resultatenset moeten zijn gebonden aan programmavariabelen.

  • De server sluit automatisch de cursor wanneer het einde van de cursor wordt gedetecteerd. De applicatie moet nog steeds SQLCloseCursor of SQLFreeStmt(SQL_CLOSE aanroepen, maar de driver hoeft het close-verzoek niet naar de server te sturen. Dit bespaart een retour over het netwerk naar de server.

De applicatie vraagt om snel-vooruit cursors met behulp van het driver-specifieke statement-attribuut SQL_SOPT_SS_CURSOR_OPTIONS. Wanneer ingesteld op SQL_CO_FFO, zijn alleen vooruitspoelbare cursors ingeschakeld zonder autofetch. Wanneer ingesteld op SQL_CO_FFO_AF, is de optie autofetch ook ingeschakeld. Voor meer informatie over autofetch, zie Autofetch gebruiken met ODBC-cursors.

Fast-forward-only cursors met autofetch kunnen worden gebruikt om een kleine resultaatset op te halen met slechts één retour naar de server. In deze stappen is n het aantal rijen dat moet worden teruggegeven:

  1. Zet SQL_SOPT_SS_CURSOR_OPTIONS op SQL_CO_FFO_AF.

  2. Stel SQL_ATTR_ROW_ARRAY_SIZE in op n + 1.

  3. Bind de resultaatkolommen aan arrays van n + 1 elementen (om veilig te zijn als er daadwerkelijk n + 1 rijen worden opgehaald).

  4. Open de cursor met SQLExecDirect of SQLExecute.

  5. Als de terugkeerstatus SQL_SUCCESS is, roep dan SQLFreeStmt of SQLCloseCursor aan om de cursor te sluiten. Alle gegevens voor de rijen zullen in de gebonden programmavariabelen staan.

Met deze stappen stuurt de SQLExecDirect of SQLExecute een cursoropen-verzoek met de autofetch-optie ingeschakeld. Bij dat ene verzoek van de client volgt de server:

  • Opent de cursor.

  • Bouwt de resultaatset op en stuurt de rijen naar de client.

  • Omdat de rijsetgrootte 1 groter was dan het aantal rijen in de resultaatset, detecteert de server het einde van de cursor en sluit de cursor.