ADO调用分页查询存储过程的实例讲解
程序员文章站
2022-11-19 22:53:26
一、分页存储过程
----------使用存储过程编写一个分页查询-----------------------
set nocount off --关闭sql...
一、分页存储过程
----------使用存储过程编写一个分页查询----------------------- set nocount off --关闭sqlserver消息 --set nocount on --开启sqlserver消息 go create proc usp_getmystudentsdatabypage --输入参数 @pagesize int=7,--每页记录条数 @pageindex int=1,--当前要查看第几页的记录 --输出参数 @recordcount int output,--总的记录的条数 @pagecount int output --总的页数 as begin --1.编写查询语句,把用户要的数据查询出来 select t.fid, t.fname, t.fage, t.fgender, t.fmath, t.fclassid, t.fbirthday from (select *,rn=row_number() over(order by fid asc) from mystudent) as t where t.rn between (@pageindex-1)*@pagesize+1 and @pagesize*@pageindex --2.计算总的记录条数 set @recordcount=(select count(*) from mystudent) --3.计算总页数 set @pagecount=ceiling(@recordcount*1.0/@pagesize) end --调用前定义输出参数 declare @rc int,@pc int exec usp_getmystudentsdatabypage @pagesize=7,@pageindex=4, @recordcount=@rc output,@pagecount=@pc output print @rc print @pc
二、ado调用存储过程
using system; using system.collections.generic; using system.componentmodel; using system.data; using system.drawing; using system.linq; using system.text; using system.windows.forms; using system.data.sqlclient; namespace _02通过ado.net调用存储过程 { public partial class form1 : form { public form1() { initializecomponent(); } private int pageindex = 1;//当前要查看的页码 private int pagesize = 7;//每页显示的记录条数 private int pagecount;//总页数 private int recordcount;//总条数 //窗体加载的时候显示第一页的数据 private void form1_load(object sender, eventargs e) { loaddata(); } private void loaddata() { //根据pageindex来加载数据 string constr = "data source=steve-pc;initial catalog=itcast2014;integrated security=true"; #region 1 //using (sqlconnection conn = new sqlconnection(constr)) //{ // //将sql语句变成存储过程名称 // string sql = "usp_getmystudentsdatabypage"; // using (sqlcommand cmd = new sqlcommand(sql, conn)) // { // //告诉sqlcommand对象,现在执行的存储过程不是sql语句 // cmd.commandtype = commandtype.storedprocedure; // //增加参数(存储过程中有几个参数,这里就需要增加几个参数) // //@pagesize int=7,--每页记录条数 // //@pageindex int=1,--当前要查看第几页的记录 // //@recordcount int output,--总的记录的条数 // //@pagecount int output --总的页数 // sqlparameter[] pms = new sqlparameter[] { // new sqlparameter("@pagesize",sqldbtype.int){value =pagesize}, // new sqlparameter("@pageindex",sqldbtype.int){value =pageindex}, // new sqlparameter("@recordcount",sqldbtype.int){ direction=parameterdirection.output}, // new sqlparameter("@pagecount",sqldbtype.int){direction=parameterdirection.output} // }; // cmd.parameters.addrange(pms); // //打开连接 // conn.open(); // //执行 //using(sqldatareader reader=cmd.executereader()) //{ //reader.read() //} //pms[2].value // } //} #endregion //dataadapter方式 datatable dt = new datatable(); using (sqldataadapter adapter = new sqldataadapter("usp_getmystudentsdatabypage", constr)) { adapter.selectcommand.commandtype = commandtype.storedprocedure; sqlparameter[] pms = new sqlparameter[] { new sqlparameter("@pagesize",sqldbtype.int){value =pagesize}, new sqlparameter("@pageindex",sqldbtype.int){value =pageindex}, new sqlparameter("@recordcount",sqldbtype.int){ direction=parameterdirection.output}, new sqlparameter("@pagecount",sqldbtype.int){direction=parameterdirection.output} }; adapter.selectcommand.parameters.addrange(pms); adapter.fill(dt); //获取输出参数并且赋值给label label1.text = "总条数:" + pms[2].value.tostring(); label2.text = "总页数:" + pms[3].value.tostring(); label3.text = "当前页:" + pageindex; //数据绑定 this.datagridview1.datasource = dt; } } //下一页 private void button2_click(object sender, eventargs e) { pageindex++; loaddata(); } //上一页 private void button1_click(object sender, eventargs e) { pageindex--; loaddata(); } } }
效果图:
三、通过ado.net调用存储过程与调用带参数的sql语句的区别。
1>把sql语句变成了存储过程名称
2>设置sqlcommand对象的commandtype为commandtype.storedprocedure
这步本质 就是在 存储过程名称前面加了个“ exec ”
3>根据存储过程的参数来设置sqlcommand对象的参数。
4>如果有输出参数需要设置输出参数的direction属性为:direction=parameterdirection.output
四、如果是通过调用command对象的executereader()方法来执行的该存储过程,那么要想获取输出参数,必须得等到关闭reader对象后,才能获取输出参数。
以上这篇ado调用分页查询存储过程的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
下一篇: SunTB编写IP地址设置切换批处理
推荐阅读
-
sqlserver关于分页存储过程的优化【让数据库按我们的意思执行查询计划】
-
三种SQL分页查询的存储过程代码
-
SQLSERVER查询锁表,阻塞,使用表名查询存储过程,行数,表字段类型等常规查询实例讲解
-
Oracle与MySQL的分页查询sql语句格式实例讲解
-
ADO调用分页查询存储过程的实例讲解
-
创建一个存储过程,以部门号为参数,查询该部门的平均工资,并输出该部门中比平均工资高的员工号、员工名。并且调用该存储过程,要求根据输入部门编号,查询平均工资及输出比平均工资高的员工号、员工名
-
oracle的存储过程实例讲解
-
mysql创建存储过程和触发器测试的实例讲解
-
实例讲解JSP调用SQL Server的存储过程
-
SQLSERVER查询锁表,阻塞,使用表名查询存储过程,行数,表字段类型等常规查询实例讲解