使用存储过程实现分页
--创建存储过程
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();
}
}
}
上一篇: S娘看了也忍不住啊。