Halaman melalui hasil kueri
Berlaku untuk: .NET Framework .NET .NET Standard
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.
menyediakan SqlDataAdapter fasilitas untuk mengembalikan hanya halaman data, melalui kelebihan beban Fill metode. 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 Fill metode untuk mengembalikan halaman data, tentukan parameter startRecord , untuk rekaman pertama di halaman data, dan parameter maxRecords , untuk jumlah rekaman di halaman data.
Contoh
Contoh kode berikut menunjukkan cara menggunakan Fill metode untuk mengembalikan halaman pertama hasil kueri di mana ukuran halaman adalah lima rekaman.
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 Himpunan Data dengan lima rekaman yang sama, tetapi hanya mengembalikan lima rekaman, gunakan TOP
klausa dan WHERE
dalam pernyataan SQL Anda, seperti dalam contoh kode berikut.
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");
Catatan
Saat halaman melalui kueri menghasilkan dengan cara ini, Anda harus mempertahankan unique identifier
yang mengurutkan baris, untuk meneruskan ID unik ke perintah untuk mengembalikan halaman rekaman berikutnya, seperti yang ditunjukkan dalam contoh kode berikut.
string lastRecord =
dataSet.Tables["Orders"].Rows[pageSize - 1]["OrderID"].ToString();
Untuk mengembalikan next page of records
menggunakan kelebihan beban metode Isian yang mengambil parameter startRecord dan maxRecords , tambahkan indeks rekaman saat ini dengan ukuran halaman dan isi tabel.
Catatan
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 += pageSize;
// Assumes that dataset and adapter are valid objects.
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");