黑马程序员_sql语句分页

------- ASP.Net+Unity开发.Net培训、期待与您交流! -------

   刚开始学习.NET编程的时候,有一个感受,就是学过的基础知识,刚开始的时候理解了,也会了,但以后老是不用的话,慢慢就会遗忘。所以个人觉得初学者应该学会用学过的知识尝试着做一些小项目,加深对知识的理解和印象,学以致用。

    以前学习数据绑定控件时,把数据表绑定到数据控件,利用数据控件的分页功能对数据进行分页,很方便。但是对于一个数据行数很多的表来说,由于数据控件每次翻页,都要重新查询一次表的所有数据,造成速度和效率低下。现在学了sql语句的知识,就尝试着用sql语句来对数据进行高效率分页。

高效率分页的思路就是对数据表的数据进行排序,根据每页显示几条数据和当前页的页码,只查询这个页码的那几条数据返回给数据控件进行显示,不用每次都要查询数据表的所有数据行。

一步一步来,首先我们有一个数据库如下图:


然后我们创建windows窗体应用程序,窗口放置一个DataGridView控件和四个按钮,如图:


将数据库连接对象创建为全局变量,以便在各个方法中都可以控制数据库的连接和关闭。另外我们还需要当前页码数,每页的记录数、总页数来控制页码翻页,要知道总页数需要查询总记录数,这几个变量都创建为全局变量,代码如下:

static string str = "data source=localhost;integratedsecurity=SSPI;database=firstdb";

SqlConnection conn = newSqlConnection(str);

static int page = 1;//当前页码

static int pagecount = 2;//每页的记录数,我们设置每页的记录数为两条

static int count = 0;//数据表中总记录数

static int allpage =0;//总页数

(vs复制代码粘到word里竟然有乱码。。。)

1、初始化窗体

在窗体的构造函数中,首先我们要查询数据库显示第一页的数据(方法为ShowFirstPage();),并查询出总记录数(方法为Count();),计算总页数,具体代码为:

 private void ShowFirstPage()//显示第一页数据

   {

    conn.Open();

     SqlCommandcomm = new SqlCommand("select top " + pagecount + " id as '序号',name as '姓名',gender as '性别' from table1", conn);

    SqlDataAdapter adapt = new SqlDataAdapter(comm);

    DataSet ds = new DataSet();

    adapt.Fill(ds);

    dgv1.DataSource = ds.Tables[0].DefaultView;

    conn.Close();

}

private voidCount()//计算总记录数和总页数

  {

 conn.Open();

 SqlCommand comm1 = new SqlCommand("selectcount(*) from table1", conn);

 count = (int)comm1.ExecuteScalar();//查询并计算数据表中的总记录数

 allpage = (int)Math.Ceiling(count * 1.0 /pagecount);//计算总页数

 conn.Close();

 }

2、第一页按钮实现

private void btnfirst_Click(object sender,EventArgs e)

       {

           page = 1;//将页码数变为1

           btnprevious.Enabled = false;//使前一页按钮不可用

           btnnext.Enabled = true;//使下一页按钮可用

           //显示第一页数据

           ShowFirstPage();

       }

3、上一页按钮实现

private void btnprevious_Click(objectsender, EventArgs e)

       {

           btnnext.Enabled = true;//使下一页按钮可用

           //如果当前页为第二页,那么显示第一页数据,并使前一页按钮不可用

           if (page == 2)

           {   ShowFirstPage();

                page--;

                btnprevious.Enabled = false;

           }

           else//当前页不是第二页,显示上一页数据

           { ShowPrevious();

           }

       }

private void ShowPrevious()//显示上一页数据

       {

           conn.Open();

           SqlCommand comm = new SqlCommand("select top " + pagecount

+ "+ id as '序号',name as '姓名',gender as '性别' from table1 where

id>(select max(id) from (select top" + pagecount * (page - 2) + " id

from table1 order by id) o)", conn);

           SqlDataAdapter adapt = new SqlDataAdapter(comm);

           DataSet ds = new DataSet();

           adapt.Fill(ds);

           dgv1.DataSource = ds.Tables[0].DefaultView;

           conn.Close();

           page--;//当前页前移一页

       }

4、下一页按钮实现

private void btnnext_Click(object sender, EventArgse)

       {

           btnprevious.Enabled = true;//使上一页按钮可用

           if (page == allpage - 1)//如果当前页为倒数第二页,使下一页

按钮不可用,显示最后一页数据

           {

                btnnext.Enabled = false;

                ShowNext();

           }

           else//如果当前页不是倒数第二页,下一页按钮可用,显示下一页

数据

           {

                ShowNext();

           }

       }

 

private void ShowNext()//显示下一页数据

       {

           conn.Open();

           SqlCommand comm = new SqlCommand("select top " + pagecount

+ " id as '序号',name as '姓名',gender as '性别' from table1 where

id>(select max(id) from (select top" + pagecount * page + " id from

table1 order by id) o)", conn);

           SqlDataAdapter adapt = new SqlDataAdapter(comm);

           DataSet ds = new DataSet();

            adapt.Fill(ds);

           dgv1.DataSource = ds.Tables[0].DefaultView;

           conn.Close();

           page++;//当前页后移一页

       }

5、最末页按钮实现、

private void btnlast_Click(object sender,EventArgs e)

       {

           btnnext.Enabled = false;//使下一页按钮不可用

           btnprevious.Enabled = true;//使上一页按钮可用

           ShowLast();//显示最后一页数据

       }

 

private void ShowLast()

       {

           conn.Open();

           SqlCommand comm = new SqlCommand("select id as '序号',name

as '姓名',gender as '性别' from table1 where id>(select max(id) from

(select top " + pagecount *(allpage-1) + " id from table1 order by

id) o)", conn);

           SqlDataAdapter adapt = new SqlDataAdapter(comm);

           DataSet ds = new DataSet();

           adapt.Fill(ds);

           dgv1.DataSource = ds.Tables[0].DefaultView;

           conn.Close();

           page = allpage;//当前页设置为末页

       }

效果图:


                            ------- ASP.Net+Unity开发.Net培训、期待与您交流! -------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值