每页显示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>
        &nbsp;</div>
        <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
    </form>
</body>
</html>