视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
ADO调用分页查询存储过程的实例讲解
2020-11-27 22:35:13 责编:小采
文档

一、分页存储过程

----------使用存储过程编写一个分页查询-----------------------
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(); } } }

效果图:

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

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

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

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

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

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

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

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

下载本文
显示全文
专题