Snabba Forward-Only markörer (ODBC)

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

När den är ansluten till en instans av SQL Server stödjer SQL Server Native Client ODBC-drivrutinen prestandaoptimeringar för framåtriktade, skrivskyddade markörer. Framåtspolande endast kursorer implementeras internt av drivrutinen och servern på ett sätt som liknar standardresultatuppsättningar. Förutom hög prestanda har även snabbspolningsmarkörer dessa egenskaper:

  • SQLGetData stöds inte. Resultatuppsättningskolumnerna måste vara bundna till programvariabler.

  • Servern stänger automatiskt markören när markörens ände upptäcks. Applikationen måste fortfarande anropa SQLCloseCursor eller SQLFreeStmt(SQL_CLOSE), men drivrutinen behöver inte skicka close-förfrågan till servern. Detta sparar en tur och retur över nätverket till servern.

Applikationen begär snabbspolningsendast kursorer med hjälp av det drivrutinsspecifika satsattributet SQL_SOPT_SS_CURSOR_OPTIONS. När den är inställd på SQL_CO_FFO är snabbspolningsmarkörer aktiverade utan autofetch. När den är inställd på SQL_CO_FFO_AF är autofetch-alternativet också aktiverat. För mer information om autofetch, se Att använda autofetch med ODBC-kursorer.

Snabbspolande markörer med autofetch kan användas för att hämta en liten resultatuppsättning med endast en rundresa till servern. I dessa steg är n antalet rader som ska returneras:

  1. Ställ SQL_SOPT_SS_CURSOR_OPTIONS på SQL_CO_FFO_AF.

  2. Ställ SQL_ATTR_ROW_ARRAY_SIZE till n + 1.

  3. Bind resultatkolumnerna till arrayer med n + 1 element (för säkerhets skull om n + 1 rader faktiskt hämtas).

  4. Öppna markören med antingen SQLExecDirect eller SQLExecute.

  5. Om returstatusen är SQL_SUCCESS, anropa då SQLFreeStmt eller SQLCloseCursor för att stänga markören. All data för raderna kommer att finnas i de bundna programvariablerna.

Med dessa steg skickar SQLExecDirect eller SQLExecute en förfrågan om att öppna markören med autofetch-alternativet aktiverat. På den enda förfrågan från klienten gör servern:

  • Öppnar markören.

  • Bygger resultatuppsättningen och skickar raderna till klienten.

  • Eftersom raduppsättningens storlek sattes till 1 mer än antalet rader i resultatuppsättningen, upptäcker servern markörens ände och stänger markören.