Megosztás a következőn keresztül:


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");  

Lásd még