Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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 DataAdapter 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 van grote queryresultaten, omdat hoewel het DataAdapter alleen de aangevraagde records in het doel DataTable of DataSet vult, de resources die nodig zijn om de hele query te retourneren nog steeds worden gebruikt. 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 startRecord parameter op, voor de eerste record op de pagina met gegevens en een maxRecords parameter voor het aantal records op de pagina met gegevens.
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.
Dim currentIndex As Integer = 0
Dim pageSize As Integer = 5
Dim orderSQL As String = "SELECT * FROM dbo.Orders ORDER BY OrderID"
' Assumes that connection is a valid SqlConnection object.
Dim adapter As SqlDataAdapter = _
New SqlDataAdapter(orderSQL, connection)
Dim dataSet As DataSet = New DataSet()
adapter.Fill(dataSet, currentIndex, pageSize, "Orders")
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 het DataSet slechts gevuld met vijf records, maar de hele Orders tabel wordt geretourneerd. Om dezelfde vijf records in de DataSet te vullen, maar slechts vijf records te retourneren, gebruikt u de TOP- en WHERE-clausules in uw SQL-instructie, zoals in het volgende codevoorbeeld.
Dim pageSize As Integer = 5
Dim orderSQL As String = "SELECT TOP " & pageSize & _
" * FROM Orders ORDER BY OrderID"
Dim adapter As SqlDataAdapter = _
New SqlDataAdapter(orderSQL, connection)
Dim dataSet As DataSet = New DataSet()
adapter.Fill(dataSet, "Orders")
int pageSize = 5;
string orderSQL = "SELECT TOP " + pageSize +
" * FROM Orders ORDER BY OrderID";
SqlDataAdapter adapter = new SqlDataAdapter(orderSQL, connection);
DataSet dataSet = new DataSet();
adapter.Fill(dataSet, "Orders");
Houd er rekening mee dat wanneer u op deze manier door de zoekresultaten bladert, u de unieke id moet behouden die de volgorde van de rijen bepaalt, om deze ID door te geven aan de opdracht die de volgende pagina met gegevens retourneert, zoals geïllustreerd in het onderstaande codevoorbeeld.
Dim lastRecord As String = _
dataSet.Tables("Orders").Rows(pageSize - 1)("OrderID").ToString()
string lastRecord =
dataSet.Tables["Orders"].Rows[pageSize - 1]["OrderID"].ToString();
Als u de volgende pagina met records wilt retourneren met behulp van de overbelasting van de Fill methode die de startRecord en maxRecords parameters gebruikt, moet u de huidige recordindex verhogen op basis van het paginaformaat en de tabel vullen. 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 = currentIndex + pageSize
dataSet.Tables("Orders").Rows.Clear()
adapter.Fill(dataSet, currentIndex, pageSize, "Orders")
currentIndex += pageSize;
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")
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");