Partilhar via


Folheando um resultado de consulta

Aplica-se a: .NET Framework .NET .NET Standard

Baixar ADO.NET

Paginar um resultado de consulta é o processo de apresentar os resultados de uma consulta em subconjuntos menores de dados, chamados páginas. Essa é uma prática comum para exibir resultados para um usuário em partes pequenas e fáceis de gerenciar.

O SqlDataAdapter fornece uma funcionalidade para devolver apenas uma página de dados, através de sobrecargas do método Fill. No entanto, esta pode não ser a melhor escolha para paginar resultados de consultas grandes porque, embora o DataAdapter preencha o destino DataTable ou DataSet com apenas os registos solicitados, os recursos para devolver a consulta completa ainda são utilizados.

Para retornar uma página de dados de uma fonte de dados sem usar os recursos para retornar a consulta inteira, especifique critérios adicionais para sua consulta que reduzam as linhas retornadas apenas àquelas necessárias.

Para usar o Fill método de devolver uma página de dados, especifique um parâmetro startRecord , para o primeiro registo na página de dados, e um parâmetro maxRecords , para o número de registos na página de dados.

Example

O seguinte exemplo de código mostra como usar o Fill método para devolver a primeira página de um resultado de consulta onde o tamanho da página é cinco registos.

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

No exemplo anterior, o DataSet é preenchido apenas com cinco registos, mas toda a tabela de Encomendas é devolvida. Para preencher o DataSet com esses mesmos cinco registos, mas apenas devolver cinco registos, utilize as cláusulas TOP e WHERE na sua instrução SQL, como no seguinte exemplo de código.

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

Observação

Ao folhear os resultados da consulta desta forma, deve preservar o unique identifier que ordena as linhas, para passar o ID único ao comando que devolva a página seguinte de registos, como mostrado no seguinte exemplo de código.

string lastRecord = 
    dataSet.Tables["Orders"].Rows[pageSize - 1]["OrderID"].ToString();

Para retornar o next page of records usando a sobrecarga do método Fill que utiliza os parâmetros startRecord e maxRecords , incremente o índice atual do registo pelo tamanho da página e preencha a tabela.

Observação

Lembre-se de que o servidor de banco de dados retorna todos os resultados da consulta, mesmo que apenas uma página de registros seja adicionada ao DataSet.

No exemplo de código a seguir, as linhas da tabela são limpas antes de serem preenchidas com a próxima página de dados. Talvez você queira preservar um certo número de linhas retornadas em um cache local para reduzir as viagens ao servidor de banco de dados.

currentIndex += pageSize;

// Assumes that dataset and adapter are valid objects.
dataSet.Tables["Orders"].Rows.Clear();
adapter.Fill(dataSet, currentIndex, pageSize, "Orders");

Para retornar a próxima página de registros sem que o servidor de banco de dados retorne a consulta inteira, especifique critérios restritivos para a instrução SELECT. Como o exemplo anterior preservou o último registro retornado, você pode usá-lo na cláusula WHERE para especificar um ponto de partida para a consulta, conforme mostrado no exemplo de código a seguir.

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

Consulte também