Aracılığıyla paylaş


Sorgu Sonucu Üzerinden Sayfalama

Sorgu sonucu üzerinden sayfalama, bir sorgunun sonuçlarını daha küçük veri alt kümelerinde veya sayfalarda döndürme işlemidir. Bu, sonuçları kullanıcıya küçük, yönetimi kolay öbekler halinde görüntülemeye yönelik yaygın bir uygulamadır.

DataAdapter yöntemi aşırı yüklemeleri aracılığıyla yalnızca bir veri sayfası döndürme olanağı sağlar. Ancak, büyük sorgu sonuçlarını sayfalandırmak için bu en iyi seçim olmayabilir, çünkü DataAdapter veya DataTable yalnızca istenen kayıtlarla doldurulsa bile, sorgunun tamamını döndürmek için gereken kaynaklar yine de kullanılır. Kaynakları kullanarak sorgunun tamamını döndürmeden bir veri kaynağından veri sayfası döndürmek için sorgunuz için döndürülen satırları yalnızca gerekli olanlara azaltan ek ölçütler belirtin.

Veri sayfasını döndürmek için Fill yöntemini kullanırken, veri sayfasındaki ilk kayıt için bir startRecord parametresi ve sayfadaki kayıt sayısını belirlemek için bir maxRecords parametresi belirtin.

Aşağıdaki kod örneğinde, sayfa boyutunun Fill beş kayıt olduğu sorgu sonucunun ilk sayfasını döndürmek için yönteminin nasıl kullanılacağı gösterilmektedir.

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

Önceki örnekte , DataSet yalnızca beş kayıtla doldurulur, ancak tablonun tamamı Orders döndürülür. Öğeyi aynı beş kayıtla doldurmak için, ancak yalnızca beş kayıt döndürmek için, aşağıdaki kod örneğinde olduğu gibi SQL deyiminizdeki TOP ve WHERE yan tümcelerini kullanın.

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

Sorguda sayfalama bu şekilde sonuçlandığında, aşağıdaki kod örneğinde gösterildiği gibi, benzersiz kimliği komutuna geçirerek sonraki kayıt sayfasını döndürmek için satırları sıralayan benzersiz tanımlayıcıyı korumanız gerektiğini unutmayın.

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

startRecord ve maxRecords parametrelerini alan Fill yönteminin aşırı yüklemesini kullanarak, geçerli kayıt dizinini sayfa boyutuna göre artırıp tabloyu doldurarak sonraki kayıt sayfasını döndürün. DataSet'e yalnızca bir kayıt sayfası eklense bile veritabanı sunucusunun sorgu sonuçlarının tamamını döndürdüğünü unutmayın. Aşağıdaki kod örneğinde, tablo satırları bir sonraki veri sayfasıyla doldurulmadan önce temizlenir. Veritabanı sunucusuna yönelik yolculukları azaltmak için yerel önbellekte belirli sayıda döndürülen satırı korumak isteyebilirsiniz.

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

Veritabanı sunucusunun sorgunun tamamını döndürmesine gerek kalmadan sonraki kayıt sayfasını döndürmek için SELECT deyimine kısıtlayıcı ölçütler belirtin. Yukarıdaki örnek döndürülen son kaydı koruduğundan, aşağıdaki kod örneğinde gösterildiği gibi sorgu için bir başlangıç noktası belirtmek üzere WHERE yan tümcesinde kullanabilirsiniz.

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

Ayrıca bakınız