Share via


Rijen ophalen

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform Systeem (PDW)SQL-database in Microsoft Fabric

OLE DB-stuurprogramma downloaden

De IRowset-interface is de basis-rijsetinterface. De IRowset-interface biedt methoden om rijen sequentieel op te halen, de gegevens uit die rijen te halen en rijen te beheren. Consumenten gebruiken de methoden in IRowset voor alle basisbewerkingen van de rijset. Dit omvat het ophalen en vrijgeven van rijen en het verkrijgen van kolomwaarden.

Wanneer een consument een interfacepointer op een rijset verkrijgt, is de eerste stap meestal het bepalen van de mogelijkheden van de rijset met behulp van de IRowsetInfo::GetProperties-methode . Dit geeft informatie terug over de interfaces die door de rowset worden blootgesteld en ook de mogelijkheden van de rowset die niet als aparte interfaces verschijnen, zoals het maximale aantal actieve rijen en het aantal rijen dat tegelijkertijd in behandeling kan zijn.

De volgende stap voor consumenten is het bepalen van de kenmerken, of metadata, van de kolommen in de rijset. Hiervoor gebruiken ze de IColumnsInfo-methode voor eenvoudige kolominformatie of de IColumnsRowset-methode voor uitgebreide kolominformatie. De GetColumnInfo-methode geeft de volgende informatie terug:

  • Het aantal kolommen in de resultaatset.

  • Een array van DBCOLUMNINFO-structuren, één per kolom.

    De volgorde van de structuren is de volgorde waarin de kolommen in de rijset voorkomen. Elke DBCOLUMNINFO-structuur bevat kolommetadata, zoals kolomnaam, ordinaal van de kolom, maximale mogelijke lengte van een waarde in de kolom, datatype van de kolom, precisie en lengte.

  • De verwijzing naar een opslag voor alle stringwaarden binnen één allocatieblok.

De consument bepaalt welke kolommen hij nodig heeft, hetzij uit de metadata of op basis van het tekstcommando dat de rijset heeft gegenereerd. Het bepaalt de ordinaalgetallen van de benodigde kolommen uit de volgorde van de kolominformatie die door IColumnsInfo wordt teruggegeven of uit de ordinaaltalen in de kolommetadata-rijset die door IColumnsRowset wordt teruggegeven.

De interfaces IColumnsInfo en IColumnsRowset worden gebruikt om informatie over de kolommen in de rowset te extraheren. De IColumnsInfo-interface levert een beperkte set informatie terug, terwijl IColumnsRowset alle metadata levert.

Opmerking

In SQL Server versie 7.0 en eerder DBCOLUMN_COMPUTEMODE de optionele metadatakolom teruggegeven door IColumnsInfo::GetColumnsInfo DBSTATUS_S_ISNULL (in plaats van de waarden die aangeven of de kolom is berekend), omdat niet kan worden bepaald of de onderliggende kolom is berekend.

De ordinaalgetallen worden gebruikt om een binding aan een kolom aan te geven. Een binding is een structuur die een element van de structuur van de consument koppelt aan een kolom. De binding kan de datawaarde, lengte en statuswaarde van de kolom binden.

Een set bindingen wordt samengebracht in een accessoire. Dit wordt gemaakt met behulp van de IAccessor::CreateAccessor-methode . Een accessor kan meerdere bindings bevatten zodat de gegevens voor meerdere kolommen kunnen worden opgehaald of ingesteld in één enkele aanroep. De consument kan meerdere accessors creëren om verschillende gebruikspatronen in verschillende delen van de applicatie te matchen. Het kan accessors creëren en vrijgeven zolang de rowset nog bestaat.

Om rijen uit de database op te halen, roept de consument een methode aan, zoals IRowset::GetNextRows of IRowsetLocate::GetRowsAt. Deze fetch-operaties plaatsen rijgegevens van de server in de rijbuffer van de provider. De consument heeft geen directe toegang tot de rijbuffer van de provider. De consument gebruikt IRowset::GetData om gegevens van de buffer van de provider naar de consumer buffer te kopiëren en IRowsetChange::SetData om datawijzigingen van de consumer buffer naar de providerbuffer te kopiëren.

De consument roept de GetData-methode aan en geeft de handle door aan een rij, de handle aan een accessor en een pointer aan een door de consument toegewezen buffer. GetData converteert de data en geeft de kolommen terug zoals gespecificeerd in de bindings die zijn gebruikt om de accessor te maken. De consument kan GetData meer dan eens aanroepen voor een rij, met behulp van verschillende accessors en buffers, waardoor de consument meerdere kopieën van dezelfde data kan verkrijgen.

Gegevens uit kolommen met variabele lengte kunnen op verschillende manieren worden behandeld. Ten eerste kunnen zulke kolommen worden gebonden aan een eindige sectie van de structuur van de consument. Dit veroorzaakt afkap wanneer de lengte van de data groter is dan de lengte van de buffer. De consument kan vaststellen dat er een afkaping is geweest door te controleren op de status DBSTATUS_S_TRUNCATED. De teruggegeven lengte is altijd de werkelijke lengte in bytes, zodat de consument ook kan bepalen hoeveel data is afgekapt.

Wanneer de consument klaar is met het ophalen of updaten van rijen, geeft hij deze vrij met de ReleaseRows-methode . Dit maakt resources vrij van de kopie van de rijen in de rowset en maakt ruimte voor nieuwe rijen. De consument kan vervolgens zijn cyclus van het ophalen of aanmaken van rijen en het benaderen van de gegevens daarin herhalen.

Wanneer de consument klaar is met de rowset, roept hij de IAccessor::ReleaseAccessor-methode aan om elke accessor vrij te geven. Het roept de IUnknown::Release-methode aan op alle interfaces die door de rowset worden blootgesteld om de rowset vrij te geven. Wanneer de rijset wordt vrijgegeven, dwingt het de loslating van eventuele resterende rijen of accessors die de consument mogelijk vasthoudt.

In deze sectie

Zie ook

Rijensets