قم أولاً بإنشاء جدول (يتطلب ترقيمًا تلقائيًا للمعرفات):
إنشاء جدول ملف أحمر الرأس (
معرف الهوية (1،1)،
أسماء الملفات nvarchar(20)،
سندوزر نفارتشار (20)،
المفتاح الأساسي (المعرف)
)
ثم نكتب 500000 سجل:
أعلن @i int
تعيين @ ط = 1
بينما @i<=500000
يبدأ
إدراج في قيم redheadedfile (أسماء الملفات، المرسل) ("خوارزمية الترحيل الخاصة بي"، "Lu Junming")
اضبط @i=@i+1
نهاية
يذهب
استخدم Microsoft Visual Studio .net 2003 لإنشاء صفحة ويب WebForm (سميتها webform8.ASPx)
مقتطف التعليمات البرمجية للواجهة الأمامية كما يلي (webform8.aspx):
<%@ لغة الصفحة = "C#" Codebehind = "WebForm8.aspx.cs" AutoEventWireup = "false" Inherits = "WebApplication6.WebForm8" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<أتش تي أم أل>
<الرأس>
<title>WebForm8</title>
<محتوى التعريف = "Microsoft Visual Studio .NET 7.1" اسم = "المولد">
<محتوى التعريف = "C#" الاسم = "CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content=" http://schemas.microsoft.com/intellisense/ie5 " name="vs_targetSchema">
</الرأس>
<body MS_POSITIONING="GridLayout">
<form id="Form1"method="post" runat="server">
<asp:datalist id = "datalist1" AlternatingItemStyle-BackColor = "#f3f3f3" العرض = "100٪" CellSpacing = "0"
CellPadding = "0" Runat = "الخادم">
<قالب العنصر>
<عرض الجدول = "100%" الحدود = "0" تباعد الخلايا = "0" خلية الحشو = "0">
<تر>
<td width="30%"
align="center"><%#DataBinder.Eval(Container.DataItem,"filenames")%></td>
<td width="30%"
align="center"><%#DataBinder.Eval(Container.DataItem,"senduser")%></td>
<td width="30%"
align="center"><%#DataBinder.Eval(Container.DataItem,"id")%></td>
</tr>
</الجدول>
</ItemTemplate>
</asp:datalist>
<div align="center">الإجمالي<asp:label id="LPageCount" Runat="server" ForeColor="#ff0000"></asp:label>الصفحات/الإجمالي
<asp:label id="LRecordCount" Runat= "server" 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: معرف التسمية ="LCurrentPage" Runat="server"
ForeColor="#ff0000"></asp:label>الصفحة الانتقال إلى الصفحة<asp:TextBox ID="gotoPage" Runat="server" العرض ="30px "
MaxLength="5" AutoPostBack="True"></asp:TextBox></div>
</النموذج>
</الجسم>
</HTML>
مقتطف رمز الخلفية كما يلي (webform8.aspx.cs)
باستخدام النظام؛
باستخدام System.Collections؛
باستخدام System.ComponentModel؛
باستخدام System.Data؛
باستخدام System.Drawing؛
باستخدام 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 Prevpage;
System.Web.UI.WebControls.LinkButton Nextpage المحمية؛
System.Web.UI.WebControls.LinkButton Lastpage؛
محمية 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. يمكنك استخدام خوارزمية ترحيل الإجراء المخزن لفهم هذه الجملة)
ViewState["PageIndex"] = 0;// احفظ قيمة فهرس الصفحة 0 في ViewState
ViewState["JumpPages"] = PageCount;// احفظ PageCount في ViewState، وحدد ما إذا كان رقم إدخال المستخدم يتجاوز نطاق
رقم الصفحة
عند القفز.
// عرض حالة LPageCount وLRecordCount
LPageCount.Text = PageCount.ToString();
LRecordCount.Text = RecCount.ToString();
// تحديد ما إذا كان مربع نص الانتقال للصفحة غير صالح
إذا (RecCount <= 20)
gotoPage.Enabled = false;
TDataBind();// استدعاء وظيفة ربط البيانات TDataBind() لتنفيذ عمليات ربط البيانات
}
}
// احسب الصفحات المتبقية
كثافة العمليات العامة OverPage ()
{
صفحات كثافة العمليات = 0؛
إذا (RecCount%PageSize != 0)
الصفحات = 1؛
آخر
الصفحات = 0؛
صفحات العودة؛
}
// احسب الصفحات المتبقية لمنع تجاوز نطاق الاستعلام عند تنفيذ عبارة SQL.
كثافة العمليات العامة ModPage ()
{
صفحات كثافة العمليات = 0؛
إذا (RecCount%PageSize == 0 && RecCount != 0)
الصفحات = 1؛
آخر
الصفحات = 0؛
صفحات العودة؛
}
/*
* وظيفة ثابتة لحساب إجمالي السجلات
*السبب وراء استخدامي للوظائف الثابتة هنا هو: إذا تمت الإشارة إلى بيانات ثابتة أو وظائف ثابتة، فسيقوم الموصل بتحسين الكود الذي تم إنشاؤه وإزالة عناصر النقل الديناميكي (
يكون تأثير الترحيل لجداول البيانات الضخمة أكثر وضوحًا).
*أتمنى أن تعطوني آرائكم وتصححوني إذا كان هناك أي خطأ.
*/
int العام الثابت احسب ()
{
int RecordCount = 0;
SqlCommand MyCmd = new SqlCommand("select count(*) as co from redheadedfile",MyCon());
SqlDataReader dr = MyCmd.ExecuteReader();
إذا (دكتور قراءة ())
RecordCount = Int32.Parse(dr["co"].ToString());
MyCmd.Connection.Close();
إرجاع عدد السجلات؛
}
// بيان اتصال قاعدة البيانات (تم الحصول عليه من Web.Config)
ثابت عام SqlConnection MyCon ()
{
SqlConnection MyConnection = new 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) // اسم أمر التصفية
{
الحالة "التالي":
CurrentPage++;
استراحة؛
الحالة "السابقة":
الصفحة الحالية--;
استراحة؛
الحالة "الأخيرة":
الصفحة الحالية = الصفحات؛
استراحة؛
تقصير:
الصفحة الحالية = 0؛
استراحة؛
}
ViewState["PageIndex"] = CurrentPage;// احفظ متغير CurrentPage المحسوب في ViewState مرة أخرى
TDataBind();// استدعاء وظيفة ربط البيانات TDataBind()
}
TDataBind () باطلة خاصة
{
CurrentPage = (int)ViewState["PageIndex"];// اقرأ قيمة رقم الصفحة من ViewState واحفظها في متغير CurrentPage لعملية
إبطال
الزر
Pages = (int)ViewState["PageCounts"];// اقرأ إجمالي معلمات الصفحة من ViewState لإجراء حسابات إبطال الزر
// تحديد حالة الأزرار الأربعة (الصفحة الرئيسية، الصفحة السابقة، الصفحة التالية، الصفحة الأخيرة)
إذا (الصفحة الحالية + 1 > 1)
{
Fistpage.Enabled = true;
Prevpage.Enabled = true;
}
آخر
{
Fistpage.Enabled = false;
Prevpage.Enabled = false;
}
إذا (الصفحة الحالية == الصفحات)
{
Nextpage.Enabled = false;
Lastpage.Enabled = false;
}
آخر
{
Nextpage.Enabled = صحيح؛
Lastpage.Enabled = صحيح؛
}
// ربط البيانات بعنصر تحكم DataList
DataSet ds = new DataSet();
// عبارات SQL الأساسية، تنفذ عمليات الاستعلام (تحدد كفاءة الترحيل :))
SqlDataAdapter MyAdapter = new SqlDataAdapter("حدد أعلى "+PageSize+" * من ملف أحمر الرأس حيث
لا يوجد معرف (اختر أعلى "+PageSize*CurrentPage+" معرف من ترتيب ملف أحمر الشعر حسب المعرف تصاعديًا) ترتيب حسب المعرف تصاعديًا"،MyCon());
MyAdapter.Fill(ds،"news")؛
datalist1.DataSource = ds.Tables["news"].DefaultView;
datalist1.DataBind();
// عرض التحكم في التسمية LCurrentPaget والتحكم في مربع النص gotoPage
LCurrentPage.Text = (CurrentPage+1).ToString();
gotoPage.Text = (CurrentPage+1).ToString();
// الافراج عن SqlDataAdapter
MyAdapter.Dispose();
}
#رمز المنطقة الذي تم إنشاؤه بواسطة مصمم نماذج الويب
تجاوز OnInit المحمي باطلة (EventArgs e)
{
//
// CODEGEN: هذا الاستدعاء مطلوب من قبل مصمم نماذج ويب ASP.NET.
//
InitializeComponent();
base.OnInit(e);
}
/// <الملخص>
/// يدعم المصمم الطرق المطلوبة - لا تستخدم محرر التعليمات البرمجية للتعديل
/// محتوى هذه الطريقة.
/// </الملخص>
الفراغ الخاص ()InitializeComponent
{
this.Fistpage.Command += new System.Web.UI.WebControls.CommandEventHandler(this.Page_OnClick);
this.Prevpage.Command += new System.Web.UI.WebControls.CommandEventHandler(this.Page_OnClick);
this.Nextpage.Command += new System.Web.UI.WebControls.CommandEventHandler(this.Page_OnClick);
this.Lastpage.Command += new System.Web.UI.WebControls.CommandEventHandler(this.Page_OnClick);
this.gotoPage.TextChanged += new System.EventHandler(this.gotoPage_TextChanged);
this.Load += new System.EventHandler(this.Page_Load })
;
#endregion
//الانتقال إلى رمز الصفحة
gotoPage_TextChanged باطل خاص (مرسل الكائن، System.EventArgs e)
{
يحاول
{
JumpPage = (int)ViewState["JumpPages"];// اقرأ قيمة الصفحة المتاحة من ViewState واحفظها في متغير JumpPage
// تحديد ما إذا كانت قيمة إدخال المستخدم تتجاوز قيمة نطاق الصفحات المتاحة
إذا (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() لإجراء عملية ربط البيانات مرة أخرى
}
}
// احصل على الاستثناءات الناتجة عن إدخال المستخدمين لأنواع بيانات غير صحيحة
قبض (استثناء إكسب)
{
Response.Write("<script>alert('"+exp.Message+"');location.href='WebForm8.aspx'</script>");
}
}
}
}
دعونا نجرب هل الكفاءة أعلى من ذلك بكثير؟