ขั้นแรกให้สร้างตาราง (ต้องมีการกำหนดหมายเลขรหัสอัตโนมัติ):
สร้างตาราง rededfile(
รหัสประจำตัว int (1,1)
ชื่อไฟล์ nvarchar (20)
ผู้ส่ง nvarchar (20)
คีย์หลัก (รหัส)
-
จากนั้นเราเขียนบันทึก 500,000 รายการ:
ประกาศ @i int
ตั้ง @i=1
ในขณะที่ @i<=500000
เริ่ม
แทรกลงในค่า rededfile (ชื่อไฟล์, ผู้ส่ง) ('อัลกอริทึมการเพจของฉัน', 'Lu Junming')
ตั้ง @i=@i+1
จบ
ไป
ใช้ Microsoft Visual Studio .net 2003 เพื่อสร้างเว็บเพจ WebForm (ฉันตั้งชื่อมันว่า webform8.ASPx)
ข้อมูลโค้ดส่วนหน้ามีดังนี้ (webform8.aspx):
<%@ ภาษาเพจ = "C#" Codebehind = "WebForm8.aspx.cs" AutoEventWireup = "false" สืบทอด = "WebApplication6.WebForm8" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<หัว>
<title>WebForm8</title>
<meta content = "ชื่อ Microsoft Visual Studio .NET 7.1" = "เครื่องกำเนิดไฟฟ้า">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content=" http://schemas.microsoft.com/intellisense/ie5 " name="vs_targetSchema">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:datalist id="datalist1" AlternatingItemStyle-BackColor="#f3f3f3" width="100%" CellSpacing="0"
CellPadding = "0" Runat = "เซิร์ฟเวอร์">
<เทมเพลตรายการ>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="30%"
align="center"><%#DataBinder.Eval(Container.DataItem,"ชื่อไฟล์")%></td>
<td width="30%"
align="center"><%#DataBinder.Eval(Container.DataItem,"senduser")%></td>
<td width="30%"
align="center"><%#DataBinder.Eval(Container.DataItem,"id")%></td>
</tr>
</ตาราง>
</เทมเพลตรายการ>
</asp:ดาตาลิสต์>
<div align="center">รวม<asp:label id="LPageCount" Runat="server" ForeColor="#ff0000"></asp:label>หน้า/รวม
<asp:label id="LRecordCount" Runat= "เซิร์ฟเวอร์" ForeColor="#ff0000"></asp:label>บันทึก
<asp:linkbutton id="Fistpage" Runat="server"
CommandName="0">หน้าแรก</asp:linkbutton> <asp:linkbutton id="Prevpage" Runat="server" CommandName ="prev">
หน้าก่อนหน้า</asp:linkbutton> <asp:linkbutton id="Nextpage" Runat="server"
CommandName="next">หน้าถัดไป</asp:linkbutton >  ; <asp:linkbutton id="Lastpage" Runat="server"
CommandName="last">หน้าสุดท้าย</asp:linkbutton> หน้าปัจจุบัน<asp: label id ="LCurrentPage" Runat="server"
ForeColor="#ff0000"></asp:label>Page ข้ามหน้า<asp:TextBox ID="gotoPage" Runat="server" width ="30px "
MaxLength="5" AutoPostBack="True"></asp:TextBox></div>
</แบบฟอร์ม>
</ร่างกาย>
</HTML>
ข้อมูลโค้ดพื้นหลังมีดังนี้ (webform8.aspx.cs)
ใช้ระบบ;
ใช้ System.Collections;
โดยใช้ System.ComponentModel;
ใช้ System.Data;
โดยใช้ระบบการวาดภาพ;
ใช้ System.Web;
โดยใช้ System.Web.SessionState;
โดยใช้ System.Web.UI;
ใช้ System.Web.UI.WebControls;
ใช้ System.Web.UI.HtmlControls;
โดยใช้ System.Data.SqlClient;
ใช้ System.Configuration;
เนมสเปซ WebApplication6
-
/// <สรุป>
/// คำอธิบายโดยย่อของ WebForm8
/// </สรุป>
WebForm8 ระดับสาธารณะ: System.Web.UI.Page
-
ป้องกัน System.Web.UI.WebControls.LinkButton Fistpage;
ป้องกัน System.Web.UI.WebControls.LinkButton หน้าก่อนหน้า;
ป้องกัน System.Web.UI.WebControls.LinkButton หน้าถัดไป;
ป้องกัน System.Web.UI.WebControls.LinkButton หน้าสุดท้าย;
ป้องกัน System.Web.UI.WebControls.DataList datalist1;
ป้องกัน System.Web.UI.WebControls.DropDownList mydroplist;
ป้องกัน System.Web.UI.WebControls.Label LPageCount;
ป้องกัน System.Web.UI.WebControls.Label LRecordCount;
ป้องกัน System.Web.UI.WebControls.Label LCurrentPage;
ป้องกัน System.Web.UI.WebControls.TextBox gotoPage;
const int PageSize=20; //กำหนดข้อมูลที่แสดงในแต่ละหน้า
int PageCount,RecCount,CurrentPage,Pages,JumpPage;//กำหนดตัวแปรหลายตัวเพื่อบันทึกพารามิเตอร์การเพจ
โมฆะส่วนตัว Page_Load (ผู้ส่งวัตถุ System.EventArgs e)
-
ถ้า(!IsPostBack)
-
RecCount = Calc();//รับจำนวนระเบียนทั้งหมดผ่านฟังก์ชัน Calc()
PageCount = RecCount/PageSize + OvERPage();//คำนวณจำนวนหน้าทั้งหมด (บวกกับฟังก์ชัน OverPage() เพื่อป้องกันไม่ให้เศษเหลือทำให้
ข้อมูลการแสดงผลไม่สมบูรณ์)
ViewState["PageCounts"] = RecCount/PageSize -
ModPage();/ /บันทึกพารามิเตอร์หน้าทั้งหมดไปที่ ViewState (ลบฟังก์ชัน ModPage() เพื่อป้องกันไม่ให้ช่วงการสืบค้นล้นเมื่อมีการดำเนินการคำสั่ง SQL คุณสามารถใช้อัลกอริธึมการเพจของ Stored Procedure เพื่อทำความเข้าใจประโยคนี้)
ViewState["PageIndex"] = 0;//บันทึกค่าดัชนีหน้าเป็น 0 ลงใน ViewState
ViewState["JumpPages"] = PageCount;//บันทึก PageCount ไปยัง ViewState และตรวจสอบว่าหมายเลขที่ผู้ใช้ป้อนเกินช่วง
หมายเลขหน้า
เมื่อกระโดดหรือไม่
//แสดงสถานะของ LPageCount และ LRecordCount
LPageCount.Text = PageCount.ToString();
LRecordCount.Text = RecCount.ToString();
//ตรวจสอบว่ากล่องข้อความการข้ามหน้าไม่ถูกต้องหรือไม่
ถ้า(RecCount <= 20)
gotoPage.Enabled = เท็จ;
TDataBind();//เรียกใช้ฟังก์ชันการเชื่อมโยงข้อมูล TDataBind() เพื่อดำเนินการเชื่อมโยงข้อมูล
-
-
//คำนวณหน้าที่เหลือ
สาธารณะ int OverPage()
-
หน้า int = 0;
ถ้า (RecCount% ขนาดหน้า != 0)
หน้า = 1;
อื่น
หน้า = 0;
กลับหน้า;
-
//คำนวณหน้าที่เหลือเพื่อป้องกันไม่ให้ช่วงการสืบค้นล้นเมื่อมีการดำเนินการคำสั่ง SQL
สาธารณะ int ModPage()
-
หน้า int = 0;
ถ้า (RecCount% ขนาดหน้า == 0 && RecCount != 0)
หน้า = 1;
อื่น
หน้า = 0;
กลับหน้า;
-
-
*ฟังก์ชันคงที่ในการคำนวณบันทึกทั้งหมด
*เหตุผลที่ฉันใช้ฟังก์ชันคงที่ที่นี่คือ: หากมีการอ้างอิงข้อมูลคงที่หรือฟังก์ชันคงที่ ตัวเชื่อมต่อจะปรับโค้ดที่สร้างขึ้นให้เหมาะสมและลบรายการการย้ายตำแหน่งแบบไดนามิก (
เอฟเฟกต์การเพจของตารางข้อมูลขนาดใหญ่จะชัดเจนยิ่งขึ้น)
*ฉันหวังว่าคุณจะให้ความเห็นแก่ฉันและแก้ไขฉันหากมีข้อผิดพลาด
-
int Calc คงที่สาธารณะ ()
-
int RecordCount = 0;
SqlCommand MyCmd = new SqlCommand("select count(*) as co from rededfile",MyCon());
SqlDataReader dr = MyCmd.ExecuteReader();
ถ้า(dr.Read())
RecordCount = Int32.Parse(dr["co"].ToString());
MyCmd.Connection.Close();
ส่งคืนจำนวนระเบียน;
-
//คำสั่งการเชื่อมต่อฐานข้อมูล (ได้รับจาก Web.Config)
SqlConnection MyCon สาธารณะแบบคงที่ ()
-
SqlConnection MyConnection = SqlConnection ใหม่ (ConfigurationSettings.AppSettings["DSN"]);
MyConnection.Open();
กลับ MyConnection;
-
// ดำเนินการค่า CommandName ที่ส่งคืนโดยปุ่มสี่ปุ่ม (หน้าแรก, หน้าก่อนหน้า, หน้าถัดไป, หน้าสุดท้าย)
โมฆะส่วนตัว Page_OnClick (ผู้ส่งวัตถุ CommandEventArgs e)
-
CurrentPage = (int)ViewState["PageIndex"];//อ่านค่าหมายเลขหน้าจาก ViewState แล้วบันทึกลงในตัวแปร CurrentPage เพื่อ
คำนวณ
พารามิเตอร์
Pages = (int)ViewState["PageCounts"];//อ่านสตริงการดำเนินการพารามิเตอร์หน้าทั้งหมดจาก ViewState
cmd = e.CommandName;
สวิตช์(cmd)//กรอง CommandName
-
กรณี "ถัดไป":
หน้าปัจจุบัน++;
หยุดพัก;
กรณี "ก่อนหน้า":
หน้าปัจจุบัน--;
หยุดพัก;
กรณี "สุดท้าย":
หน้าปัจจุบัน = หน้า;
หยุดพัก;
ค่าเริ่มต้น:
หน้าปัจจุบัน = 0;
หยุดพัก;
-
ViewState["PageIndex"] = CurrentPage;//บันทึกตัวแปร CurrentPage ที่คำนวณแล้วไปที่ ViewState อีกครั้ง
TDataBind();//เรียกใช้ฟังก์ชันการเชื่อมโยงข้อมูล TDataBind()
}
โมฆะส่วนตัว TDataBind()
-
CurrentPage = (int)ViewState["PageIndex"];//อ่านค่าหมายเลขหน้าจาก ViewState และบันทึกลงในตัวแปร CurrentPage สำหรับการดำเนินการทำให้ปุ่ม
ใช้ไม่ได้
Pages = (int)ViewState["PageCounts"];//อ่านพารามิเตอร์หน้าทั้งหมดจาก ViewState เพื่อทำการคำนวณปุ่มที่ไม่ถูกต้อง
// กำหนดสถานะของปุ่มทั้งสี่ (หน้าแรก, หน้าก่อนหน้า, หน้าถัดไป, หน้าสุดท้าย)
ถ้า (หน้าปัจจุบัน + 1 > 1)
-
Fistpage.Enabled = จริง;
Prevpage.Enabled = จริง;
-
อื่น
-
Fistpage.Enabled = เท็จ;
Prevpage.Enabled = เท็จ;
-
ถ้า (หน้าปัจจุบัน == หน้า)
-
Nextpage.Enabled = เท็จ;
Lastpage.Enabled = เท็จ;
-
อื่น
-
Nextpage.Enabled = จริง;
Lastpage.Enabled = จริง;
-
//การเชื่อมโยงข้อมูลกับการควบคุม DataList
ชุดข้อมูล ds = ชุดข้อมูลใหม่ ();
//คำสั่ง Core SQL ดำเนินการค้นหา (กำหนดประสิทธิภาพของเพจ :))
SqlDataAdapter MyAdapter = new SqlDataAdapter("เลือกสูงสุด "+PageSize+" * จาก rededfile โดยที่ id
ไม่อยู่ใน (เลือกบนสุด "+PageSize*CurrentPage+" id จาก rededfile เรียงลำดับตาม id asc) เรียงลำดับตาม id asc",MyCon());
MyAdapter.Fill(ds, "ข่าว");
datalist1.DataSource = ds.Tables ["ข่าว"].DefaultView;
datalist1.DataBind();
//แสดงการควบคุมป้ายกำกับ LCurrentPage และกล่องข้อความควบคุมสถานะ gotoPage
LCurrentPage.Text = (CurrentPage+1).ToString();
gotoPage.Text = (หน้าปัจจุบัน+1).ToString();
//ปล่อย SqlDataAdapter
MyAdapter.Dispose();
}
#region รหัสที่สร้างโดย Web Forms Designer
แทนที่การป้องกันโมฆะ OnInit (EventArgs e)
-
-
// CODEGEN: การเรียกนี้จำเป็นโดยผู้ออกแบบ ASP.NET Web Forms
-
เตรียมใช้งานส่วนประกอบ();
ฐาน OnInit(e);
-
/// <สรุป>
/// Designer รองรับวิธีการที่จำเป็น - อย่าใช้โปรแกรมแก้ไขโค้ดเพื่อแก้ไข
/// เนื้อหาของวิธีนี้
/// </สรุป>
โมฆะส่วนตัว InitializeComponent()
-
this.Fistpage.Command += System.Web.UI.WebControls.CommandEventHandler ใหม่ (this.Page_OnClick);
this.Prevpage.Command += System.Web.UI.WebControls.CommandEventHandler ใหม่ (this.Page_OnClick);
this.Nextpage.Command += System.Web.UI.WebControls.CommandEventHandler ใหม่ (this.Page_OnClick);
this.Lastpage.Command += System.Web.UI.WebControls.CommandEventHandler ใหม่ (this.Page_OnClick);
this.gotoPage.TextChanged += System.EventHandler ใหม่ (this.gotoPage_TextChanged);
this.Load += ใหม่ System.EventHandler(this.Page_Load);
}
#ภูมิภาคสุดท้าย
//ข้ามโค้ดหน้า
โมฆะส่วนตัว gotoPage_TextChanged (ผู้ส่งวัตถุ System.EventArgs e)
-
พยายาม
-
JumpPage = (int)ViewState["JumpPages"];//อ่านค่าเพจที่มีอยู่จาก ViewState และบันทึกลงในตัวแปร JumpPage
//ตรวจสอบว่าค่าที่ผู้ใช้ป้อนเกินค่าช่วงหน้าที่มีอยู่หรือไม่
if(Int32.Parse(gotoPage.Text) > JumpPage || Int32.Parse(gotoPage.Text) <= 0)
Response.Write("<script>alert('ช่วงหน้าอยู่นอกขอบเขต!');location.href='WebForm8.aspx'</script>");
อื่น
-
int InputPage = Int32.Parse(gotoPage.Text.ToString()) - 1;//แปลงค่าอินพุตของผู้ใช้และบันทึกไว้ใน
ตัวแปร InputPage
ประเภท int
ViewState["PageIndex"] = InputPage;//เขียนค่า InputPage ลงใน ViewState["PageIndex"]
TDataBind();//เรียกใช้ฟังก์ชันการเชื่อมโยงข้อมูล TDataBind() เพื่อดำเนินการเชื่อมโยงข้อมูลอีกครั้ง
-
-
//จับข้อยกเว้นที่เกิดจากผู้ใช้ป้อนประเภทข้อมูลที่ไม่ถูกต้อง
catch (ข้อยกเว้นประสบการณ์)
-
Response.Write("<script>alert('"+exp.Message+"');location.href='WebForm8.aspx'</script>");
-
-
-
}
มาลองดูกัน ประสิทธิภาพสูงขึ้นมากไหม?