Menerapkan paging dalam prosedur tersimpan
Penulis:Eve Cole
Waktu Pembaruan:2009-07-01 15:55:30
Saya bukan seorang programmer yang sangat berpengalaman, jadi saya akan menemui banyak masalah selama proyek. Menggunakan paging dalam database adalah salah satu masalah yang saya temui selama proyek. Saya memeriksa banyak informasi dari Internet, dan ada banyak Metode. Tapi menurut saya membuat tabel data sementara adalah metode paling sederhana. Saat saya melakukan ekstensi Keanggotaan, saya menemukan bahwa Microsoft juga menggunakannya dengan cara ini. Anda cukup membuka prosedur tersimpan Keanggotaan dan melihatnya.
Percuma ngomong lebih banyak, lihat saja kodenya dan akan jelas haha.
1BUAT PROSEDUR dbo.BuatSederhana
2(
3 @PageIndex ke dalam,
4 @Ukuran Halaman ke dalam
5)
6AS
7MULAI
8 --Tentukan tiga variabel:
9 -- @PageLowerBound: Batas bawah rekaman yang diambil.
10 -- @PageUpperBound: Batas atas rekaman yang akan diambil.
11 -- @TotalRecords: Mengembalikan jumlah total rekaman, terutama digunakan untuk penghitungan halaman.
12 DEKLARASIKAN @PageLowerBound int
13 DEKLARASIKAN @PageUpperBound int
14 DEKLARASIKAN @TotalRecords int
15
16 --Hitung nilai batas atas dan bawah.
17 SET @PageLowerBound=@PageIndex * @PageSize
18 SET @PageUpperBound=@PageLowerBound+@PageSize-1
19
20--Buat tabel sementara:
21--IndexId adalah pengidentifikasi dan secara otomatis bertambah 1;
22--SimpleId diisi dengan tabel data [Sederhana];
23 BUAT TABEL #PageIndexForSimple
dua puluh empat (
25 IndexId int identitas(0,1) BUKAN NULL,
26 SimpleId int
27)
28--Mengisi tabel sementara
29 MASUKKAN KE #PageIndexForSimple(SimpleId)
30 PILIH detik.[SimpleId]
31 DARI [Sederhana] s
32 --WHERE pernyataan kondisi dan ODER BY dapat ditambahkan di sini
33
34 --Dapatkan jumlah total rekaman. Faktanya, jumlah baris yang terpengaruh adalah jumlah total rekaman.
35 PILIH @TotalRecords=@@ROWCOUNT
36
37 --Dapatkan rekaman yang kita inginkan.
38 PILIH hal.*
39 DARI [Sederhana] s,#PageIndexForSimple hal
40 DIMANA s.[SimpleId]=p.[SimpleId]
41 DAN hal.[IndexId]>=@PageLowerBound
42 DAN P.[IndexId]< =@PageUpperBound
43 DIPESAN BERDASARKAN s.[Sederhana]
44
45 --Mengembalikan jumlah total catatan.
46 KEMBALI @TotalRecords
47END Kalian bisa memahaminya dari komentar diatas. Haha, sekarang sudah saya tulis disini, tulis juga kode programnya:
1Daftar Publik GetSimple(int pageIndex,int pageIndex,out int totalRecords){
2 Daftar entitas=Daftar baru();
3 SqlParameter[]param=baru SqlParameter[]{
4 SqlParameter baru("@PageIndex",SqlDbType.Int),
5 SqlParameter baru("@PageSize",SqlDbType.Int),
6 SqlParameter baru("@ReturnValue",SqlDbType.Int),
7};
8 param[0].Value=indeks halaman;
9 param[1].Nilai=Ukuran halaman;
10 param[2].Direction = ParameterDirection.ReturnValue;
11 SqlDataReader reader=SqlHelper.ExecuteReader(CommandType.StoredProcedure, "GetSimple", param);
12 Sementara(pembaca.Baca()){
13 entitas.Tambahkan(GetSimpleEntity(pembaca))
14}
15 pembaca.Tutup();
16 mencoba{
17 totalRecords=(int)param[2].Nilai;
18 }menangkap{}
19 entitas pengembalian;
20} Beberapa fungsi di atas saya tulis sendiri:
Kelas SqlHelper: Kelas kueri database yang disederhanakan.
GetSimpleEntity (pembaca SqlDataReader): Karena akuisisi kelas entitas dasar sering digunakan dalam proyek, fungsi pribadi terpisah ditulis untuk digunakan kembali;
Perlu dicatat bahwa ketika mendapatkan jumlah total catatan, jenisnya mungkin DbNull, yang menyebabkan kesalahan.
http://www.cnblogs.com/xdotnet/archive/2006/09/19/procedure_for_paging_select.html