Bagikan melalui


Memberi Halaman pada Hasil Kueri

Menelusuri hasil kueri adalah proses mengembalikan hasil kueri dalam subkumpulan data, atau halaman yang lebih kecil. Ini adalah praktik umum untuk menampilkan hasil kepada pengguna dalam potongan kecil yang mudah dikelola.

DataAdapter menyediakan fasilitas untuk mengembalikan halaman data saja, melalui kelebihan metode Fill. Namun, ini mungkin bukan pilihan terbaik untuk menelusuri hasil kueri besar karena, meskipun DataAdapter hanya mengisi DataTable atau DataSet target dengan rekaman yang diminta, sumber daya untuk mengembalikan seluruh kueri masih digunakan. Untuk mengembalikan halaman data dari sumber data tanpa menggunakan sumber daya untuk mengembalikan seluruh kueri, tentukan kriteria tambahan untuk kueri Anda yang mengurangi baris yang dikembalikan menjadi hanya yang diperlukan.

Untuk menggunakan metode Fill guna mengembalikan halaman data, tentukan parameter startRecord, untuk data pertama di halaman data, dan parameter maxRecords, untuk jumlah rekaman di halaman data.

Contoh kode berikut menunjukkan cara menggunakan metode Fill untuk mengembalikan halaman pertama hasil kueri di mana ukuran halamannya adalah lima rekaman.

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

Pada contoh sebelumnya, DataSet hanya diisi dengan lima rekaman, tetapi seluruh tabel Orders dikembalikan. Untuk mengisi DataSet dengan lima rekaman yang sama, tetapi hanya mengembalikan lima rekaman, gunakan klausul TOP dan WHERE dalam pernyataan SQL Anda, seperti pada contoh kode berikut.

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

Perlu diperhatikan bahwa, saat menelusuri hasil kueri dengan cara ini, Anda harus mempertahankan pengidentifikasi unik yang mengurutkan baris, untuk meneruskan ID unik ke perintah guna mengembalikan halaman rekaman berikutnya, seperti yang diperlihatkan dalam contoh kode berikut.

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

Untuk mengembalikan halaman rekaman berikutnya menggunakan kelebihan metode Fill yang menggunakan parameter startRecord dan maxRecords, tambahkan indeks rekaman saat ini berdasarkan ukuran halaman dan isi tabel. Ingatlah bahwa server database mengembalikan seluruh hasil kueri meskipun hanya satu halaman rekaman yang ditambahkan ke DataSet. Dalam contoh kode berikut, baris tabel dikosongkan sebelum diisi dengan halaman data berikutnya. Anda sebaiknya mempertahankan beberapa baris yang dikembalikan dalam cache lokal untuk mengurangi perjalanan ke server database.

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

Untuk mengembalikan halaman rekaman berikutnya tanpa meminta server database mengembalikan seluruh kueri, tentukan kriteria terbatas pada pernyataan SELECT. Karena contoh sebelumnya mempertahankan rekaman terakhir yang dikembalikan, Anda bisa menggunakannya dalam klausul WHERE untuk menentukan titik awal kueri, seperti yang diperlihatkan dalam contoh kode berikut.

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

Lihat juga