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].[ ...
随机推荐
- Python常用第三方模块(长期更新)
1.keyboard #监控键盘 2.PIL#处理图片 3.operator #操作列表 4.shelve #数据存储方案 保存dat文件 5.optparse #处理命令行参数 6.configpa ...
- React server rendering —— 网易美学主站同构实录
此文已由作者张硕授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 网易美学主站在最初开发时,因为各种历史原因,引入了例如JQuery,Bootstrop,Angular, Re ...
- day65 Django模板语言
常用语法 只需要记两种特殊符号: {{ }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} 变量名由字母数字和下划线组成. 点(.)在模板语言中有特殊的含 ...
- 1002. Find Common Characters
Given an array A of strings made only from lowercase letters, return a list of all characters that s ...
- 《Python绝技:运用Python成为顶级黑客》 用Python进行渗透测试
1.编写一个端口扫描器 TCP全连接扫描.抓取应用的Banner #!/usr/bin/python #coding=utf-8 import optparse import socket from ...
- mysql导入数据错误
ERROR 29 (HY000): File '/tmp/cun' not found (Errcode: 13) # sudo /etc/init.d/apparmor reload(重新加载) 大 ...
- TestNG的常用注解
@BeforeSuite:表示此注解的方法会在当前测试集合(Suite)中的任一测试用例开始运行之前执行 @AfterSuite:表示此注解的方法会在当前测试集合(Suite)中的所有测试程序运行结束 ...
- SQL实现数据行列转换
前言: 在日常的工作中,使用数据库查看数据是很经常的事,数据库的数据非常多,如果此时的数据设计是一行行的设计话,就会有多行同一个用户的数据,查看起来比较费劲,如果数据较多时,不方便查看,为了更加方便工 ...
- J01-Java IO流总结一 《异常捕获》
下面演示java中处理I/O操作时的异常的正确方式,总结自书籍,书名忘啦~ 先看一种不正确的方式 方式一: import java.io.FileInputStream; import java.io ...
- tensorflow初次接触记录,我用python写的tensorflow第一个模型
tensorflow初次接触记录,我用python写的tensorflow第一个模型 刚用python写的tensorflow机器学习代码,训练60000张手写文字图片,多层神经网络学习拟合17000 ...