Stránkování prostřednictvím výsledku dotazu

Platí pro: .NET Framework .NET Standard

Stáhnout ADO.NET

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