Lapozás lekérdezési eredményen keresztül
A lekérdezés eredményének lapozása a lekérdezés eredményeinek visszaadása kisebb adathalmazokban vagy lapokban. Ez az általános gyakorlat az eredmények kis méretű, könnyen kezelhető adattömbökben való megjelenítésére.
A DataAdapter lehetővé teszi, hogy csak egy adatoldalt adjon vissza a Fill metódus túlterhelése révén. Előfordulhat azonban, hogy nem ez a legjobb választás a nagy lekérdezési eredmények lapozásához, mert bár a DataAdapter kitölti a célt DataTable , vagy DataSet csak a kért rekordokat használja, a teljes lekérdezés visszaadására szolgáló erőforrások továbbra is használhatók. Ha egy adatforrás adatoldalát szeretné visszaadni anélkül, hogy az erőforrásokat használva a teljes lekérdezést visszaadja, adjon meg további feltételeket a lekérdezéshez, amelyek csak a szükséges sorokra csökkentik a visszaadott sorokat.
Ha a Fill metódussal egy adatoldalt szeretne visszaadni, adjon meg egy startRecord paramétert az adatoldal első rekordja, valamint egy maxRecords paramétert az adatoldal rekordjainak számához.
Az alábbi példakód bemutatja, hogyan használhatja a Fill metódust egy lekérdezés eredményének első oldalának visszaadására, ahol az oldalméret öt rekord.
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");
Az előző példában az Adathalmaz csak öt rekorddal van kitöltve, de a rendszer a teljes Rendelések táblát visszaadja. Ha az Adathalmazt ugyanazzal az öt rekorddal szeretné kitölteni, de csak öt rekordot ad vissza, használja az SQL-utasítás TOP és WHERE záradékait, ahogyan az alábbi kód példában is látható.
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");
Vegye figyelembe, hogy ha a lekérdezésen keresztüli lapozás ilyen eredményt ad, meg kell őriznie a sorokat rendelő egyedi azonosítót, hogy az egyedi azonosítót a parancsnak átadja a rekordok következő oldalának visszaadásához, ahogyan az az alábbi kód példájában látható.
Dim lastRecord As String = _
dataSet.Tables("Orders").Rows(pageSize - 1)("OrderID").ToString()
string lastRecord =
dataSet.Tables["Orders"].Rows[pageSize - 1]["OrderID"].ToString();
Ha a startRecord és maxRecords paramétereket használó Fill metódus túlterhelésével szeretné visszaadni a rekordok következő lapját, növelje az aktuális rekordindexet az oldalméret alapján, és töltse ki a táblázatot. Ne feledje, hogy az adatbázis-kiszolgáló a teljes lekérdezési eredményt adja vissza, annak ellenére, hogy a rendszer csak egy rekordlapot ad hozzá az Adathalmazhoz. A következő kód példában a táblázat sorai törlődnek, mielőtt megtelnének a következő adatoldallal. Érdemes lehet bizonyos számú visszaadott sort megőrizni egy helyi gyorsítótárban az adatbázis-kiszolgálóra való utazások csökkentése érdekében.
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");
Ha úgy szeretné visszaadni a rekordok következő lapját, hogy az adatbázis-kiszolgáló nem adja vissza a teljes lekérdezést, adjon meg korlátozó feltételeket a Standard kiadás LECT utasításhoz. Mivel az előző példa megőrizte az utolsó visszaadott rekordot, használhatja a WHERE záradékban a lekérdezés kiindulópontjának megadásához, ahogyan az az alábbi kód példában látható.
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");