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].[ ...
随机推荐
- 【C#进阶】委托那些事儿(二)
二.传统的委托 接下来讲一讲方法参数.下面以“餐馆服务员为客户下单”[2]的事件作为描述.一般对事件的做法分3个部分: 1. 方法参数 EventArgs,一般用于传送数据.在本例场景中 public ...
- Webapi上传数据(XML)敏感字符解决方案
方法名加特性 [ValidateInput(false)] 配置文件加 <httpRuntime requestValidationMode="2.0" targetFram ...
- day 82 URL分发
一 .admin 流程 (1) 启动 autodiscover_modules('admin', register_to=site) (2) 注册 单例模式 admin.site=AdminSite( ...
- kernel 调试 打印IP地址
#define NIPQUAD(addr) \ ((unsigned char *)&addr)[0], \ ((unsigned char *)&addr)[1], \ ((unsi ...
- keepalive 原理讲解
keepalive 我们说到keepalive的时候,需要先明确一点,这个keepalive说的是tcp的还是http的. tcp的keepalive是侧重在保持客户端和服务端的连接,一方会不定期发送 ...
- out.print()与out.write()的区别
out对象的类型是JspWriter.JspWriter继承了java.io.Writer类. 1)print方法是子类JspWriter,write是Writer类中定义的方法: 2)重载的prin ...
- 腾讯云 利用php + apache + mysql 搭建服务器环境
1.一键安装需要的软件源 yum install -y httpd php php-fpm mysql mysql-server php-mysql 1) httpd 即为 apache 2)php ...
- ios实现fastlane自动化打包
终于抽出时间来学习自动化打包了,app在测试阶段一天总会经历好几次的打包,每次打包真是身心疲惫,刚打完的包说不定就被测试妹子反应还要微调什么地方,我就真的有气没法出,打一次包怎么也得浪费十几分钟,还不 ...
- 用c语言实现三子棋
1 game.c://实现三子棋的.c文件 #define _CRT_SECURE_NO_WARNINGS #include"game.h" void init_board(cha ...
- 【NOIP2013】货车运输 最大生成树+倍增
题目大意:给你一张n个点m条边的图,有q次询问,每次让你找出一条从x至y的路径,使得路径上经过的边的最小值最大,输出这个最大的最小值. 显然,经过的路径必然在这张图的最大生成树上. 我们求出这个图的最 ...