ใช้เพจในขั้นตอนการจัดเก็บ
ผู้เขียน:Eve Cole
เวลาอัปเดต:2009-07-01 15:55:30
ฉันไม่ใช่โปรแกรมเมอร์ที่มีประสบการณ์มากนัก ดังนั้นฉันจะพบปัญหามากมายในระหว่างโปรเจ็กต์ การใช้เพจจิ้งในฐานข้อมูลเป็นหนึ่งในปัญหาที่ฉันพบระหว่างโปรเจ็กต์ ฉันตรวจสอบข้อมูลจำนวนมากจากอินเทอร์เน็ต และมีวิธีการมากมาย แต่ฉันคิดว่าการสร้างตารางข้อมูลชั่วคราวเป็นวิธีที่ง่ายที่สุด เมื่อฉันทำส่วนขยายการเป็นสมาชิก ฉันพบว่า Microsoft ก็ใช้วิธีนี้เช่นกัน คุณสามารถเปิดขั้นตอนการจัดเก็บสมาชิกภาพแล้วลองดู
ไม่มีประโยชน์ที่จะพูดมากกว่านี้แค่ดูโค้ดก็ชัดเจนแล้ว 555
1 สร้างขั้นตอน dbo.CreateSimple
2(
3 @PageIndex int,
4 @ขนาดหน้า int
5)
6AS
7เริ่มต้น
8 --กำหนดตัวแปรสามตัว:
9 -- @PageLowerBound: ขีดจำกัดล่างของบันทึกที่ดึงมา
10 -- @PageUpperBound: ขีดจำกัดบนของระเบียนที่จะดึงข้อมูล
11 -- @TotalRecords: ส่งกลับจำนวนเรกคอร์ดทั้งหมด ซึ่งส่วนใหญ่ใช้สำหรับการคำนวณหน้า
12 ประกาศ @PageLowerBound int
13 ประกาศ @PageUpperBound int
14 ประกาศ @TotalRecords int
15
16 --คำนวณค่าของขีดจำกัดบนและล่าง
17 SET @PageLowerBound=@PageIndex * @PageSize
18 SET @PageUpperBound=@PageLowerBound+@PageSize-1
19
20--สร้างตารางชั่วคราว:
21--IndexId เป็นตัวระบุและเพิ่มขึ้น 1 โดยอัตโนมัติ
22--SimpleId ถูกกรอกด้วยตารางข้อมูล [Simple];
23 สร้างตาราง #PageIndexForSimple
ยี่สิบสี่ (
25 IndexId int เอกลักษณ์ (0,1) ไม่เป็นโมฆะ
26 SimpleId นานาชาติ
27)
28--เต็มโต๊ะชั่วคราว
29 ใส่ลงใน #PageIndexForSimple(SimpleId)
30 เลือก [SimpleId]
31 จาก [แบบง่าย]
32 --WHERE เงื่อนไขและคำสั่ง ODER BY สามารถเพิ่มได้ที่นี่
33
34 --รับจำนวนระเบียนทั้งหมด ที่จริงแล้ว จำนวนแถวที่ได้รับผลกระทบคือจำนวนระเบียนทั้งหมด
35 เลือก @TotalRecords=@@ROWCOUNT
36
37 --รับบันทึกที่เราต้องการ
38 เลือก วิ.*
39 จาก [แบบง่าย] s,#PageIndexForSimple น
40 โดยที่ [SimpleId]=p.[SimpleId]
41 และ p.[IndexId]>=@PageLowerBound
42 และ P.[IndexId]< =@PageUpperBound
43 เรียงตาม s.[ง่าย]
44
45 --ส่งคืนจำนวนระเบียนทั้งหมด
46 รีเจอร์ @TotalRecords
47END เข้าใจได้จากความเห็นข้างบนนี้ครับ 555 เมื่อผมเขียนไว้ที่นี่แล้ว ก็เขียนโค้ดของโปรแกรมด้วย:
1รายการสาธารณะ<Simple> GetSimple(int pageIndex,int pageIndex,out int TotalRecords){
2 รายการ <แบบง่าย> เอนทิตี=รายการใหม่<แบบง่าย>();
3 SqlParameter[]param=ใหม่ SqlParameter[]{
4 SqlParameter ใหม่("@PageIndex",SqlDbType.Int)
5 SqlParameter ใหม่("@PageSize",SqlDbType.Int)
6 SqlParameter ใหม่("@ReturnValue",SqlDbType.Int)
7};
8 พารามิเตอร์[0].Value=pageIndex;
9 พารามิเตอร์[1].Value=pageSize;
10 พารามิเตอร์ [2].Direction = parameterDirection.ReturnValue;
11 เครื่องอ่าน SqlDataReader=SqlHelper.ExecuteReader(CommandType.StoredProcedure, "GetSimple", พารามิเตอร์);
12 ในขณะที่ (reader อ่าน ()) {
13 เอนทิตีเพิ่ม (GetSimpleEntity (ผู้อ่าน))
14}
15 ตัวอ่านปิด();
16 ลอง{
17 TotalRecords=(int)พารามิเตอร์[2].ค่า;
18 }จับ{}
19 นิติบุคคลที่ส่งคืน;
20} ฟังก์ชันข้างต้นบางส่วนเขียนโดยฉันเอง:
คลาส SqlHelper: คลาสแบบสอบถามฐานข้อมูลแบบง่าย
GetSimpleEntity (เครื่องอ่าน SqlDataReader): เนื่องจากการได้มาของคลาสเอนทิตีพื้นฐานมักใช้ในโปรเจ็กต์ จึงมีการเขียนฟังก์ชันส่วนตัวแยกต่างหากเพื่อนำกลับมาใช้ใหม่
เป็นที่น่าสังเกตว่าเมื่อรับจำนวนบันทึกทั้งหมด ประเภทอาจเป็น DbNull ทำให้เกิดข้อผิดพลาด
http://www.cnblogs.com/xdotnet/archive/2006/09/19/procedure_for_paging_select.html