一、分页存储过程

----------使用存储过程编写一个分页查询-----------------------
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调用分页查询存储过程的更多相关文章

  1. SQLServer分页查询存储过程

    项目中用到的SQLServer分页查询存储过程. [存储过程] create PROCEDURE prcPageResult -- 获得某一页的数据 -- @currPage int = 1,     ...

  2. 【原创】SQL分页查询存储过程

    ------------------------------------- -----作者:张欣宇 -----时间:2013-06-28 -----简介:根据参数和条件分页查询 ----------- ...

  3. MySQL分页查询存储过程

    -- 分页查询delimiter $create procedure p_List(in i_Name varchar(50),in i_CName varchar(20),in pageIndex ...

  4. SQL Server分页查询存储过程

    --分页存储过程create PROCEDURE [dbo].[commonPagination]@columns varchar(500), --要显示的列名,用逗号隔开 @tableName va ...

  5. javaweb分页查询实现

    Javaweb分页技术实现 分页技术就是通过SQL语句(如下)来获取数据,具体实现看下面代码 //分页查询语句 select * from 表名 where limit page , count; 和 ...

  6. Ibatis调用存储过程实现增删改以及分页查询

    1.Ibatis实现增删改操作很简单了,通常我是将某一模块的增删改功能写在一个存储过程里,通过一个标识符去区分执行增加还是修改抑或删除操作. statement: <!-- 存储过程:实现学生的 ...

  7. 存储过程分页查询和在ado.net中的使用,返回查询总数

    1.创建查询分页的存储过程 CREATE PROCEDURE PageQuery @tableName VARCHAR(),-- 表名 @strWhere VARCHAR(),-- 查询条件 @col ...

  8. 存储过程分页 Ado.Net分页 EF分页 满足90%以上

    存储过程分页: create proc PR_PagerDataByTop @pageIndex int, @pageSize int, @count int out as select top(@p ...

  9. sql连表分页查询(存储过程)

    1.平时分页查询都比较多针对一个表的数据 而这个分页查询是针对连表查询的 ,这也是我网上改版别人的sql语句 先在数据库新建一个存储过程 拷贝以下代码 CREATE PROCEDURE [dbo].[ ...

随机推荐

  1. IocPerformance 常见IOC 功能、性能比较

    IocPerformance IocPerformance 基本功能.高级功能.启动预热三方面比较各IOC,可以用作选型参考. Lamar: StructureMap的替代品 Lamar 文档 兼容S ...

  2. C# npoi 从excel导入datagridviews 批量联网核查

    DataSet ds = new DataSet(); OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Fil ...

  3. 构建NetCore应用框架之实战篇(一):什么是框架,如何设计一个框架

    一.系列简述 本篇起,将通过一系列文章,去描述如何构建一个应用开发框架,并以作者开发的框架为例,逐个点展开分析,如何从零开始,构建自己的开发框架. 本系列文章的目的,是带领有一编程经验的人,通过动手, ...

  4. 徒手画个disk不容易啊。。。

    static const GLfloat disk_vertex_buffer_data[] = { // quarter 1 0.0f, 0.0f, -1.0f, 0.707f, 0.0f, -0. ...

  5. 900. RLE Iterator

    Write an iterator that iterates through a run-length encoded sequence. The iterator is initialized b ...

  6. 关于finecms v5 会员头像 任意文件上传漏洞分析

    看到我私藏的一个洞被别人提交到补天拿奖金,所以我干脆在社区这里分享,给大家学习下 本文原创作者:常威,本文属i春秋原创奖励计划,未经许可禁止转载! 1.定位功能 下载源码在本地搭建起来后,正常登陆了用 ...

  7. Android应用安全防护和逆向分析 ——apk混淆成其他语言代码

    现在很多人对于app的安全是越来越重视了,尤其是金融相关的行业,对于app的防范可是下足了功夫.各种加固,各种加密算法,层出不穷.我个人觉得,在安全技术这块,没有绝对安全的.也许今天这个技术起到了防范 ...

  8. PHP之旅3 php数组以及遍历数组 以及each() list() foreach()

    php的数组的定义 <?php //php中定义数组时可以通过索引直接进行赋值: $mArr[0]="哈哈"; $mArr[1]=70; $mArr[2]='haha'; e ...

  9. centos7在分区上建立文件系统和挂载

    在上一篇博客中,我们只说了硬盘的分区,既然进行分区,那么我们就要知道如何使用这些分区,就是接下来的建立文件系统和挂载. mkfs(make filesystem)格式化,建立文件系统 可以看到各种文件 ...

  10. 2. Linear Model

    1. 基本形式 给定由$d$个属性描述的示例 $\textbf{x} =(x_1;x_2;...,x_n)$,其中$x_i$是$x$在第$i$个属性上的取值,线性模型(linear model)试图学 ...