ADO调用分页查询存储过程的实例讲解_实用技巧
16lz
2021-01-22
下面小编就为大家分享一篇ADO调用分页查询存储过程的实例讲解,具有很好的参考价值,希望对大家有所帮助让大家更好的使用ADO进行分页。对ADO感兴趣的一起跟随小编过来看看吧
一、分页存储过程
----------使用存储过程编写一个分页查询-----------------------set nocount off --关闭SqlServer消息--set nocount on --开启SqlServer消息gocreate proc usp_getMyStudentsDataByPage--输入参数@pagesize int=7,--每页记录条数@pageindex int=1,--当前要查看第几页的记录--输出参数@recordcount int output,--总的记录的条数@pagecount int output --总的页数asbegin--1.编写查询语句,把用户要的数据查询出来selectt.fid,t.fname,t.fage,t.fgender,t.fmath,t.fclassid,t.fbirthdayfrom (select *,rn=row_number() over(order by fid asc) from MyStudent) as twhere 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 intexec usp_getMyStudentsDataByPage @pagesize=7,@pageindex=4, @recordcount=@rc output,@pagecount=@pc outputprint @rcprint @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.NET对SQL Server数据库执行增删改查操作详解
ADO.NET实用实例介绍
ADO.NET实现对SQL Server数据库的操作教程
更多相关文章
- 第五章C++:语句的相关介绍
- Microsoft C++ 语言扩展:try-except 语句结构化异常
- C ++中continue和break语句的简单比较
- 在C++中对象如何作为参数传递和返回?(代码示例)
- C ++控制语句的使用
- c++输出语句
- c语句以句号结束对吗
- 浅谈C#方法的六种参数
- #define和printf是不是c语句?