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.
Platí pro: .NET Framework
.NET
Standard
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.
SqlDataAdapter poskytuje prostředky pro vrácení pouze stránky dat prostřednictvím přetížení metody Fill. Nicméně to nemusí být nejlepší volba pro stránkování prostřednictvím velkých výsledků dotazů, protože i když DataAdapter vyplní cílový DataTable nebo DataSet jen 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 parametr startRecord , pro první záznam na stránce dat a parametr maxRecords pro počet záznamů na stránce dat.
Example
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ů.
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 datová sada vyplněna pouze pěti záznamy, ale vrátí se celá tabulka Orders . Pokud chcete datovou sadu vyplnit stejnými pěti záznamy, ale vrátit pouze pět záznamů, použijte TOP v příkazu SQL klauzule a WHERE klauzule, jako v následujícím příkladu kódu.
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");
Poznámka:
Při stránkování výsledků dotazu tímto způsobem musíte zachovat unique identifier zajišťující pořadí řádků, aby bylo možné předat jedinečné ID příkazu pro vrácení další stránky záznamů, jak je znázorněno v následujícím příkladu kódu.
string lastRecord =
dataSet.Tables["Orders"].Rows[pageSize - 1]["OrderID"].ToString();
Chcete-li vrátit next page of records pomocí přetížené metody Fill, která přebírá parametry startRecord a maxRecords, zvýšit aktuální index záznamu o velikost stránky a vyplnit tabulku.
Poznámka:
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 += pageSize;
// Assumes that dataset and adapter are valid objects.
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");