温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

使用ADO怎么调用分页查询的存储过程

发布时间:2021-03-10 14:52:37 来源:亿速云 阅读:178 作者:Leah 栏目:开发技术

这篇文章给大家介绍使用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();   }  } }

效果图:

使用ADO怎么调用分页查询的存储过程

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

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

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

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

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

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

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

关于使用ADO怎么调用分页查询的存储过程就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

ado
AI