下面小编就为大家分享一篇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数据库的操作教程

更多相关文章

  1. 第五章C++:语句的相关介绍
  2. Microsoft C++ 语言扩展:try-except 语句结构化异常
  3. C ++中continue和break语句的简单比较
  4. 在C++中对象如何作为参数传递和返回?(代码示例)
  5. C ++控制语句的使用
  6. c++输出语句
  7. c语句以句号结束对吗
  8. 浅谈C#方法的六种参数
  9. #define和printf是不是c语句?

随机推荐

  1. android背景选择器selector用法、自定义B
  2. Android -- 无线网络配置信息的管理者Wif
  3. ArcGIS API for Android 案例教程 17
  4. Android Stagefright
  5. 《Qt on Android核心编程》前言:为什么写
  6. RelativeLayout中常用属性解释
  7. Android中R.java没有自动生成解决方案
  8. Android Binder简介
  9. Android 根文件系统分析
  10. 优秀的Android开源软件