欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

使用存储过程实现分页

程序员文章站 2022-04-08 21:25:34
--创建存储过程create proc usp_userInfo@pageSize int=7,--每页显示条数@pageIndex int=1,--每页显示页数@pageCount int output ,--显示总的条数@recodNumber int output--显示总的页数asbegin ......

--创建存储过程
create proc usp_userinfo
@pagesize int=7,--每页显示条数
@pageindex int=1,--每页显示页数
@pagecount int output ,--显示总的条数
@recodnumber int output--显示总的页数
as
begin
select
u.id,
u.username,
u.userpwd,
u.usergander,
u.useraddress
from(select *,rn= row_number() over(order by id) from userinfo) as u
where u.rn between (@pageindex-1)*@pagesize+1 and @pagesize*@pageindex
--计算总的记录条数
set @pagecount=(select count(*) from userinfo)
--计算总的页数
set @recodnumber =ceiling( @pagecount*1.0/@pagesize)
end
--声明变量
declare @count int, @number int
--查询存储过程,给输出参数赋值
exec usp_userinfo @pagecount=@count output,@recodnumber=@number output
--输出结果
print @count
print @number

效果如图所示:

使用存储过程实现分页

 

public partial class form1 : form
{
  //定义变量
  private int pagesize = 7;//当前显示的条数
  private int pageindex = 1;//当前显示第几页
  private int pagecount;//显示当前总条数
  private int recodnumber;//显示总的页数
  public form1()
  {
    initializecomponent();
  }

  private void form1_load(object sender, eventargs e)
  {
    listdata();
  }

  private void listdata()
  {
    //连接数据库
    string sqlconn = "server=.;database=testdb;uid=sa;pwd=123456";
    datatable table = new datatable();
    //数据库中的存储过程名称(usp_userinfo)
  using (sqldataadapter adapter = new sqldataadapter("usp_userinfo", sqlconn))
  {
    adapter.selectcommand.commandtype = commandtype.storedprocedure;//声明是存储过程
    sqlparameter[] parameter = new sqlparameter[]
  {
    //第一个参数必须和数据库中保持一致
    new sqlparameter("@pagesize",sqldbtype.int){ value=pagesize},
    new sqlparameter("@pageindex",sqldbtype.int){ value=pageindex},
    new sqlparameter("@pagecount", sqldbtype.int){ direction=parameterdirection.output },//在数据库中是输出参数,所以这里不能用value,必须用                direction=parameterdirection.output(表示输出)
    new sqlparameter("@recodnumber", sqldbtype.int){ direction=parameterdirection.output },

  };
    adapter.selectcommand.parameters.addrange(parameter);
    adapter.fill(table);
    //根据parameter数组的下标取到值
    pagecount = int.parse(parameter[2].value.tostring());
    recodnumber = int.parse(parameter[3].value.tostring());
    label1.text = "总条数:" + pagecount.tostring();
    label2.text = "总页数:" + recodnumber.tostring();
    label3.text = "当前页数:" + pageindex;
    //绑定数据源
    this.datagridview1.datasource = table;

  }
}

  //下一页

  private void button1_click(object sender, eventargs e)
  {
    if (pageindex == recodnumber)
    {
      this.button1.hide();
    }
    else
    {
      this.button1.show();
      this.button2.show();
      pageindex++;
      listdata();
    }

  }

    //上一页

    private void button2_click(object sender, eventargs e)
    {
      if (pageindex == 1)
      {
        this.button2.hide();
      }
      else
      {
        this.button2.show();
        this.button1.show();
        pageindex--;
        listdata();
      }
    }
}