php调用存储过程实现分页,ADO调用分页查询存储过程的实例讲解_实用技巧

下面小编就为大家分享一篇ADO调用分页查询存储过程的实例讲解,具有很好的参考价值,希望对大家有所帮助让大家更好的使用ADO进行分页。对ADO感兴趣的一起跟随小编过来看看吧

一、分页存储过程

----------使用存储过程编写一个分页查询-----------------------

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();

}

}

}

效果图:

3dbb4a10402d6509d3589c525a2a1e9e.png

三、通过ado.net调用存储过程与调用带参数的SQL语句的区别。

1>把SQL语句变成了存储过程名称

2>设置SqlCommand对象的CommandType为CommandType.StoredProcedure

这步本质 就是在 存储过程名称前面加了个“ exec ”

3>根据存储过程的参数来设置SqlCommand对象的参数。

4>如果有输出参数需要设置输出参数的Direction属性为:Direction=ParameterDirection.Output

四、如果是通过调用Command对象的ExecuteReader()方法来执行的该存储过程,那么要想获取输出参数,必须得等到关闭reader对象后,才能获取输出参数。

以上这篇ADO调用分页查询存储过程的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持PHP中文网。

相关推荐:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值