每页显示20条数据。。表中有 10万行数据。
测试时间为 00:00:00.0312500秒
以下是代码
Class.cs
--------------------------
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
//------------------------------
using System.Data.Sql;
using System.Data.SqlClient;
using System.Configuration;
//------------------------------
public class cdb
{
//----------------------------------------------------------------------------------------------变量定义
public long ye, ye1, count;
public int dsy;
//创建数据连接字符串...
SqlConnection conn = new SqlConnection("server=localhost;uid=sa;pwd=4501550;database=aaa");
//---------------------------------------------------------------------------------------------方法定义区..
//查询操作..并返回数据集...查询操作的数据库连接没问题。。下面更新`删除`就出错咯!
public SqlDataAdapter Select(string sql)
{
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
conn.Close();
return da;
}
//执行SQL无返回数据操作...
public void ExeSql(string sql) //
{
//创建Command对象并执行SQL命令..
SqlCommand CmdDelete = new SqlCommand(sql, conn);
CmdDelete.CommandType = CommandType.Text; //SQL命令执行方式为文本方式。。
conn.Open();//建立连接。。
CmdDelete.ExecuteNonQuery();//无返回数据执行方式。。
conn.Close();//关闭数据连接。。。
}
//分页....
public DataSet Select(byte top, string table,string lie,string id, long ye, string fuhao) //top是取数据..table是哪个表..
{
DataSet ds = new DataSet(); //建立数据集对象.
SqlCommand Cmd = new SqlCommand("select count("+id+") from " + table, conn); //取得一共有多少条数据.
conn.Open();
Cmd.CommandType = CommandType.Text; //执行方式为sql命令...
this.count = Convert.ToInt64(Cmd.ExecuteScalar());//得到数据。。。
if ((this.count % top) != 0)
{ this.dsy = (Convert.ToInt32(this.count) / top) + 1; }
else
{ this.dsy = (Convert.ToInt32(this.count) / top); }
if (fuhao == "上一页")
{
SqlDataAdapter da = new SqlDataAdapter("select top " + top + " " + id + "," + lie + " from (select top " + top + " " + id + "," + lie + " from " + table + " where " + id + " > " + ye1 + " order by " + id + " asc) as tt" +" order by " + id + " desc", conn);
da.Fill(ds, "dtext");
}
else
{
if (ye == 0) //如果是第一次加载`就直接读取最后几条记录。。。。
{
SqlDataAdapter da = new SqlDataAdapter("select top " + top + " " + id + "," + lie + " from " + table + " where " + id + " > " + ye + " order by " + id + " desc", conn);
da.Fill(ds, "dtext");
}
else //不是第一次`就取得上次的记录进行处理。。。
{
string a="select top " + top + " " + id + "," + lie + " from(select top " + top + " " + id + "," + lie + " from " + table + " where " + id + " < " + ye + " order by " + id + " desc) as tt" + " order by " + id + " desc";
SqlDataAdapter da = new SqlDataAdapter(a, conn);
da.Fill(ds, "dtext");
}
}
//进入循环..查询本次数据的最后一条记录的值。.
if (fuhao == "下一页")
{
for (int i = Convert.ToInt32(ds.Tables["dtext"].Rows.Count) - 1; i >= 0; i--)
{
this.ye = Convert.ToInt32(ds.Tables["dtext"].Rows[i]["ID"]);//如果最后一条记录不为空..跳出循环.并取得最后一条记录的值.
this.ye1 = Convert.ToInt32(ds.Tables["dtext"].Rows[0]["ID"]);
break; //跳出循环..
//}
}
}
else
{
for (int i = Convert.ToInt32(ds.Tables["dtext"].Rows.Count) - 1; i >= 0; i--)
{
this.ye = Convert.ToInt32(ds.Tables["dtext"].Rows[i]["ID"]);//如果最后一条记录不为空..跳出循环.并取得最后一条记录的值.
this.ye1 = Convert.ToInt32(ds.Tables["dtext"].Rows[0]["ID"]);
break; //跳出循环..
//}
}
}
conn.Close();
return ds;
}
}
Default.aspx.cs
--------------------------
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
//------------------------------
using System.Data.Sql;
using System.Configuration;
//------------------------------
public partial class _Default : System.Web.UI.Page
{
cdb db = new cdb(); //创建数据库操作对象。。
int id,id1; //id控制+页 id1控制-页
byte fh;
//protected void Application_BeginRequest(Object sender, EventArgs e)
//{
// Application["StartTime"] = System.DateTime.Now;
//}
//protected void Application_EndRequest(Object sender, EventArgs e)
//{
// System.DateTime startTime = (System.DateTime)Application["StartTime"];
// System.DateTime endTime = System.DateTime.Now;
// System.TimeSpan ts = endTime - startTime;
// Response.Write("页面执行时间:" + ts.Milliseconds + " 毫秒");
//}
protected void Page_Load(object sender, EventArgs e)
{
/*
* 变量.属性.方法.对象.使用说明(怕时间长了忘记了..)
* -------------------------------------------------------------------------------------------------------------------------
* db 对象 创建一个类型为cdb 的对象实例..
* id 变量 控制当前第几页的变量.它的作用是当用户选择了 下一页 之后`使用这个变量得到下一页的值.并显示出来
* id1 变量 控制当前第几页的变量.它的作用是当用户选择了 上一页 之后`使用这个变量得到上一页的值.并显示出来
* fh 变量 判断用户选择的是上一页还是下一页...确定程序具体读取数据的方式...(0 下一页数据 1 上一页数据 2 首页数据 3 尾页数据)
* _xia 方法 读取下一页数据的方法..
* _shang 方式 读取上一页数据的方法..
* db.Select 对象方法 读取数据的方法 db.Select(读取条数,"表名","要查询的列,"主键",ID值,">或则<")
* db.ye 对象属性 取得读取出数据的第一条记录的主键值。
* db.ye1 对象属性 取得读取出数据的最后一条记录的主键值.
* db.count 对象属性 取得当前数据记录总数...
* db.dsy 对象属性 取得当前数据可以分多少页的值...
* -------------------------------------------------------------------------------------------------------------------------
*/
fh =Convert.ToByte(Request.QueryString["fh"]);//确定运行方式....判断用户上按的是上一页还是下一页的超连接...
id = Convert.ToInt32(Request.QueryString["id"]);//得到当前页数控制+页..
id1 = Convert.ToInt32(Request.QueryString["id"]);//得到当前页数控制-页..
db.ye = Convert.ToInt32(Request.QueryString["a"]);//得到上一页最后一条数据的ID信息.
db.ye1 = Convert.ToInt32(Request.QueryString["b"]);//得到上一页的第一条记录..
if (fh==0) //如果用户按的是下一页那么就执行读取下一页数据的方法..
{
_xia(db.ye); //数据读取过程.. "db.ye"是上一页最后一条数据的ID值.
if (id == 0) ;//只在第一次加载的时候做的判断...
{
id = Convert.ToInt32(Request.QueryString["id"]);
id = 1;
}
}
else//否则执行读取上一页数据的方法...
{
_shang(db.ye1); //数据读取过程...db.ye1"是上一页第一条数据的ID值.
};
}
//-----------------------------------------------
public void _shang(long a) //下一页数据读取方法..
{
DataSet ds = new DataSet(); //建立数据集对象.
ds = db.Select(20, "dtext","dname,dnl","id", a, "上一页");//将数据放入数据集..并读取Top条记录. db.Select(读取条数,"表名",ID值,">或则<")
Repeater1.DataSource = ds.Tables["dtext"]; //进行设定...
Repeater1.DataBind();//执行...
}
public void _xia(long a)//上一页数据读取方法..
{
DataSet ds = new DataSet(); //建立数据集对象.
ds = db.Select(20, "dtext", "dname,dnl", "id", a, "下一页");//将数据放入数据集..并读取Top条记录. db.Select(读取条数,"表名","要查询的列,"主键",ID值,">或则<")
Repeater1.DataSource = ds.Tables["dtext"]; //进行设定...
Repeater1.DataBind();//执行...
}
//-----------------------------------------------
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Footer)//判断是否为页尾。。。
{//查找类型为HyperLink..ID为down的控件....
HyperLink down = (HyperLink)e.Item.FindControl("down");
down.NavigateUrl = "?a=" + db.ye + "&b=" + db.ye1 + "&fh=0&id=" + (id += 1);//取得本页第一条速度的ID值和最后一条的ID值.发送运数据读取方式.计算当前为多少页.
HyperLink up = (HyperLink)e.Item.FindControl("up");
up.NavigateUrl = "?a=" + db.ye + "&b=" + db.ye1 + "&fh=1&id=" + (id1 -= 1);//取得本页第一条速度的ID值和最后一条的ID值.发送运数据读取方式.计算当前为多少页.
//如果是最后一页了`那么"下一页"的连接不可用。。
if (id == db.dsy)
{ down.Enabled = false;}
else
{ down.Enabled = true; }
if (id == 1)
{ up.Enabled = false; }
else
{ up.Enabled = true; }
Label fenye = (Label)e.Item.FindControl("fenye");
fenye.Text = "一共分" + db.dsy+"页 当前为第"+id+"页"; //获得一共有多少页。和当前页..
Label jilu = (Label)e.Item.FindControl("jilu");
jilu.Text = "共有" + db.count + "条记录"; //获得一共有多少条记录。。
}
}
protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < 1000000;i++)
{
db.ExeSql("insert into dtext(Dname,dnl) values("+i.ToString()+",'20')");
}
}
}
Default.aspx
-----------------------------------
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div style="font-size: 9pt; font-family: 宋体">
<asp:Repeater ID="Repeater1" runat="server" EnableTheming="True" OnItemDataBound="Repeater1_ItemDataBound" OnItemCommand="Repeater1_ItemCommand">
<HeaderTemplate>
<table>
<tr>
<td>
姓名
</td>
<td>
年龄
</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<Tr>
<td>
<%# Eval ("dname") %>
</td>
<td>
<%# Eval("dnl") %>
</td>
</Tr>
</ItemTemplate>
<FooterTemplate>
<tr>
<td> <asp:Label ID="jilu" runat="server"></asp:Label></td>
<td><asp:Label ID="fenye" runat="server"></asp:Label></td>
<td>
<asp:HyperLink ID="down" runat="server" Text="下一页" ></asp:HyperLink>
<asp:HyperLink ID="up" runat=server Text="上一页"></asp:HyperLink>
<asp:HyperLink ID="index" runat=server Text="首页"></asp:HyperLink>
<asp:HyperLink ID="wei" runat=server Text="尾页"></asp:HyperLink>
</td>
</tr>
</table>
</FooterTemplate>
</asp:Repeater>
</div>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
</form>
</body>
</html>