ADO调用分页查询存储过程
一、分页存储过程
----------使用存储过程编写一个分页查询-----------------------
set nocount off --关闭SqlServer消息 --set nocount on --开启SqlServer消息 go
create proc usp_getMyStudentsDataByPage --输入参数
@pagesize int=,--每页记录条数
@pageindex int=,--当前要查看第几页的记录 --输出参数
@recordcount int output,--总的记录的条数
@pagecount int output --总的页数
as
begin
--.编写查询语句,把用户要的数据查询出来
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-)*@pagesize+ and @pagesize*@pageindex --.计算总的记录条数
set @recordcount=(select count(*) from MyStudent) --.计算总页数
set @pagecount=ceiling(@recordcount*1.0/@pagesize) --乘以1.0转成flot型, 然后celling “进一法”取值
end --调用前定义输出参数
declare @rc int,@pc int
exec usp_getMyStudentsDataByPage @pagesize=,@pageindex=, @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 = ;//当前要查看的页码 private int pageSize = ;//每页显示的记录条数 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[].Value.ToString();
label2.Text = "总页数:" + pms[].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对象后,才能获取输出参数。
来源:传智播客 视频教程。
ROW_NUMBER() OVER函数的基本用法
https://jingyan.baidu.com/article/9989c74604a644f648ecfef3.html
ADO调用分页查询存储过程的更多相关文章
- SQLServer分页查询存储过程
项目中用到的SQLServer分页查询存储过程. [存储过程] create PROCEDURE prcPageResult -- 获得某一页的数据 -- @currPage int = 1, ...
- 【原创】SQL分页查询存储过程
------------------------------------- -----作者:张欣宇 -----时间:2013-06-28 -----简介:根据参数和条件分页查询 ----------- ...
- MySQL分页查询存储过程
-- 分页查询delimiter $create procedure p_List(in i_Name varchar(50),in i_CName varchar(20),in pageIndex ...
- SQL Server分页查询存储过程
--分页存储过程create PROCEDURE [dbo].[commonPagination]@columns varchar(500), --要显示的列名,用逗号隔开 @tableName va ...
- javaweb分页查询实现
Javaweb分页技术实现 分页技术就是通过SQL语句(如下)来获取数据,具体实现看下面代码 //分页查询语句 select * from 表名 where limit page , count; 和 ...
- Ibatis调用存储过程实现增删改以及分页查询
1.Ibatis实现增删改操作很简单了,通常我是将某一模块的增删改功能写在一个存储过程里,通过一个标识符去区分执行增加还是修改抑或删除操作. statement: <!-- 存储过程:实现学生的 ...
- 存储过程分页查询和在ado.net中的使用,返回查询总数
1.创建查询分页的存储过程 CREATE PROCEDURE PageQuery @tableName VARCHAR(),-- 表名 @strWhere VARCHAR(),-- 查询条件 @col ...
- 存储过程分页 Ado.Net分页 EF分页 满足90%以上
存储过程分页: create proc PR_PagerDataByTop @pageIndex int, @pageSize int, @count int out as select top(@p ...
- sql连表分页查询(存储过程)
1.平时分页查询都比较多针对一个表的数据 而这个分页查询是针对连表查询的 ,这也是我网上改版别人的sql语句 先在数据库新建一个存储过程 拷贝以下代码 CREATE PROCEDURE [dbo].[ ...
随机推荐
- PageAdmin CMS网站建设教程:如何实现信息的定时发布
PageAdmin Cms发布文章时候有一个上线时间设置和下线时间设置,网站编辑人员可以利用这个功能来实现定时发布,在信息发布界面,如下图: 设置后就会自动加入定时任务中,注意这个功能需要再系统设置& ...
- AJPFX的资金安全性
AJPFX承诺保证客户资金安全,并严格按照英国的相关规章制度从事经营活动.客户资金存放于投资级银行的独立账户中.通过实行公司资产与客户资金分别保管,在发生无偿债能力的罕见情况下,客户可获退还独立存放资 ...
- django 模型对象的 update() get_or_create() 的使用
update() 如果一个查询集是一个列表对象, 需要更新该列表对象里所有的单个数据集的数据,可以使用update()方法,而不须遍历整个查询集对象一个个逐一进行修改 obj_list = UserI ...
- jzoj5875
這玩意嚴格意義上算是水法(因為可能會被卡) 題目中,如果按照一般的bfs來搜索,那麼有平方級邊,會tle 如果按照補邊的線性來搜索,那麼時間複雜度變為min(k*k,m)*n,視n,m同階,則時間複雜 ...
- Android逆向-java代码基础
作者:I春秋作家——HAI_ 0×00 前言 看这篇可以先看看之前的文章,进行一个了解.Android逆向-java代码基础(1)Android逆向-java代码基础(2) 之前看到有大佬用smali ...
- [兼容]——IE 8 常见兼容性问题
接触了一个PC端网页开发的项目,要求兼容到IE 8,遇到不少坑,在这里记录下: 1.IE8 的兼容性视图 bug描述:IE8有许多新更新,但微软为了兼容以前的IE浏览器,提出了"兼容性视图& ...
- 对Spring 及SpringMVC的理解
spring是一个轻型容器(light-weight Container),其核心是Bean工厂(Bean Factory),用以构造我们所需要的M(Model).在此基础之上,Spring提供了AO ...
- Java_使用日志
日志有什么用? 在实际开发中,不可能使用控制台输出所有数据,可以用日志把程序运行的过程记录下来,包括运行中出现的异常和BUG 当出现问题的时候,程序员可以去查看日志,从而能快速的找到问题所在. 一般来 ...
- 【4】JMicro微服务-服务限流
如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 通过配置SMethod的maxSpeed属性实现服务限流,单位是个/每秒(qps),也就是服务方法每秒允许接收的最大请求个数 ...
- error "Can only specify query options (orderby, where, take, skip) after last navigation" when fetching a List<string>
Question I use OData v3 and WCF in visual studio 2012. I want to return List<string> using the ...