Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Stránkování prostřednictvím výsledku dotazu je proces vrácení výsledků dotazu v menších podmnožinách dat nebo stránkách. Toto je běžný postup zobrazení výsledků uživateli v malých, snadno spravovatých blocích.
DataAdapter poskytuje prostředky pro vrácení pouze stránky dat prostřednictvím přetížení metody Fill. To ale nemusí být nejlepší volbou pro stránkování ve velkých výsledcích dotazu, protože i když DataAdapter vyplní cílový prostor DataTable nebo DataSet pouze požadovanými záznamy, prostředky potřebné k vrácení celého dotazu se stále používají. Pokud chcete vrátit stránku dat ze zdroje dat bez použití prostředků k vrácení celého dotazu, zadejte další kritéria pro dotaz, která snižují počet řádků vrácených pouze na požadované řádky.
Chcete-li použít metodu Fill k vrácení stránky dat, zadejte startRecord parametr, pro první záznam na stránce dat a maxRecords parametr pro počet záznamů na stránce dat.
Následující příklad kódu ukazuje, jak použít metodu Fill k vrácení první stránky výsledku dotazu, kde velikost stránky je pět záznamů.
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");
V předchozím příkladu je DataSet pouze vyplněno pěti záznamy, ale je vrácena celá tabulka Orders.
DataSet Pokud chcete vyplnit stejných pět záznamů, ale vrátit pouze pět záznamů, použijte v příkazu SQL klauzule TOP a WHERE stejně jako v následujícím příkladu kódu.
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");
Všimněte si, že při procházení výsledků dotazu tímto způsobem je nutné zachovat jedinečný identifikátor, který řadí řádky, aby bylo možné předat tento unikátní ID příkazu pro získání další stránky záznamů, jak je ukázáno v následujícím příkladu kódu.
Dim lastRecord As String = _
dataSet.Tables("Orders").Rows(pageSize - 1)("OrderID").ToString()
string lastRecord =
dataSet.Tables["Orders"].Rows[pageSize - 1]["OrderID"].ToString();
Pokud chcete vrátit další stránku záznamů pomocí přetížení metody Fill, která přebírá parametry startRecord a maxRecords, zvýšíte index aktuálního záznamu podle velikosti stránky a vyplníte tabulku. Nezapomeňte, že databázový server vrátí celé výsledky dotazu, i když se do datové sady přidá jenom jedna stránka záznamů. V následujícím příkladu kódu jsou řádky tabulky před vyplněním další stránky dat vymazány. Možná budete chtít zachovat určitý počet vrácených řádků v místní mezipaměti, abyste snížili počet cest k databázovému serveru.
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");
Pokud chcete vrátit další stránku záznamů, aniž by databázový server vrátil celý dotaz, zadejte omezující kritéria pro příkaz SELECT. Vzhledem k tomu, že předchozí příklad zachoval poslední vrácený záznam, můžete ho použít v klauzuli WHERE k určení výchozího bodu dotazu, jak je znázorněno v následujícím příkladu kódu.
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");