Share via


Bladeren door een queryresultaat

Van toepassing op: .NET Framework .NET Standard

ADO.NET downloaden

Het doorbladeren van een queryresultaat is het proces waarbij de resultaten van een query in kleinere gegevenssegmenten of pagina's worden geretourneerd. Dit is een veelvoorkomende procedure voor het weergeven van resultaten aan een gebruiker in kleine, eenvoudig te beheren segmenten.

Het SqlDataAdapter biedt de mogelijkheid om slechts een pagina met gegevens te retourneren, door overloading van de Fill methode. Dit is echter mogelijk niet de beste keuze voor het bladeren door grote queryresultaten omdat, hoewel de DataAdapter het doel DataTable of DataSet alleen de aangevraagde records vult, nog steeds alle resources nodig zijn om de gehele query op te halen.

Als u een pagina met gegevens uit een gegevensbron wilt retourneren zonder de resources te gebruiken om de hele query te retourneren, geeft u aanvullende criteria op voor uw query waarmee de rijen worden beperkt die alleen naar de vereiste rijen worden geretourneerd.

Als u de Fill methode wilt gebruiken om een pagina met gegevens te retourneren, geeft u een parameter startRecord op, voor de eerste record op de pagina met gegevens en een parameter maxRecords , voor het aantal records op de pagina met gegevens.

Example

In het volgende codevoorbeeld ziet u hoe u de Fill methode gebruikt om de eerste pagina van een queryresultaat te retourneren waarbij het paginaformaat vijf records is.

int currentIndex = 0;
int pageSize = 5;

string orderSQL = "SELECT * FROM Orders ORDER BY OrderID";
// Assumes that connection is a valid SqlConnection object.  
SqlDataAdapter adapter = new SqlDataAdapter(orderSQL, connection);

DataSet dataSet = new DataSet();
adapter.Fill(dataSet, currentIndex, pageSize, "Orders");

In het vorige voorbeeld is de DataSet alleen gevuld met vijf records, maar de hele tabel Orders wordt geretourneerd. Als u de DataSet wilt vullen met dezelfde vijf records, maar slechts vijf records wilt retourneren, gebruikt u de TOP en WHERE componenten in uw SQL-instructie, zoals in het volgende codevoorbeeld.

int pageSize = 5;

string orderSQL = "SELECT TOP " + pageSize +
  " * FROM Orders ORDER BY OrderID";

// Assumes that connection is a valid SqlConnection object.  
SqlDataAdapter adapter = new SqlDataAdapter(orderSQL, connection);

DataSet dataSet = new DataSet();
adapter.Fill(dataSet, "Orders");

Opmerking

Wanneer u op deze manier door de queryresultaten bladert, moet u de unique identifier volgorde van de rijen behouden om de unieke id door te geven aan de opdracht om de volgende pagina met records te retourneren, zoals wordt weergegeven in het volgende codevoorbeeld.

string lastRecord = 
    dataSet.Tables["Orders"].Rows[pageSize - 1]["OrderID"].ToString();

Als u wilt next page of records terugkeren naar de overbelasting van de fill-methode die de parameters StartRecord en maxRecords gebruikt, moet u de huidige recordindex verhogen met het paginaformaat en de tabel vullen.

Opmerking

Houd er rekening mee dat de databaseserver de volledige queryresultaten retourneert, ook al wordt er slechts één pagina met records toegevoegd aan de DataSet.

In het volgende codevoorbeeld worden de tabelrijen gewist voordat ze worden gevuld met de volgende pagina met gegevens. Mogelijk wilt u een bepaald aantal geretourneerde rijen in een lokale cache behouden om de verplaatsingen naar de databaseserver te verminderen.

currentIndex += pageSize;

// Assumes that dataset and adapter are valid objects.
dataSet.Tables["Orders"].Rows.Clear();
adapter.Fill(dataSet, currentIndex, pageSize, "Orders");

Als u de volgende pagina met records wilt retourneren zonder dat de databaseserver de hele query retourneert, geeft u beperkende criteria op voor de SELECT-instructie. Omdat in het voorgaande voorbeeld de laatste geretourneerde record behouden blijft, kunt u deze in de WHERE-component gebruiken om een beginpunt voor de query op te geven, zoals wordt weergegeven in het volgende codevoorbeeld.

orderSQL = "SELECT TOP " + pageSize + 
    " * FROM Orders WHERE OrderID > " + lastRecord + " ORDER BY OrderID";
adapter.SelectCommand.CommandText = orderSQL;

dataSet.Tables["Orders"].Rows.Clear();

adapter.Fill(dataSet, "Orders");

Zie ook