Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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 DataAdapter 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 grandes consultas porque, embora preencha DataAdapter o destino DataTable ou DataSet apenas com os registos solicitados, os recursos para devolver a consulta completa continuam a ser 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 startRecord parâmetro para o primeiro registo na página de dados e um maxRecords parâmetro para o número de registos na página de dados.
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.
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");
No exemplo anterior, o DataSet é preenchido apenas com cinco registos, mas a tabela inteira Orders é devolvida. Para preencher o DataSet com esses mesmos cinco registos, mas apenas devolver cinco registos, use as cláusulas TOP e WHERE na sua instrução SQL, como no seguinte exemplo de código.
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");
Observe que, ao paginar os resultados da consulta dessa maneira, você deve preservar o identificador exclusivo que ordena as linhas, a fim de passar o ID exclusivo para o comando para retornar a próxima página de registros, conforme mostrado no exemplo de código a seguir.
Dim lastRecord As String = _
dataSet.Tables("Orders").Rows(pageSize - 1)("OrderID").ToString()
string lastRecord =
dataSet.Tables["Orders"].Rows[pageSize - 1]["OrderID"].ToString();
Para devolver a página seguinte de registos usando a sobrecarga do método Fill que recebe os parâmetros startRecord e maxRecords, aumente o índice atual de registos pelo tamanho da página e preencha a tabela. 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 = 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");
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")
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");