zoukankan      html  css  js  c++  java
  • 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)  --乘以1.0转成flot型, 然后celling “进一法”取值
    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对象后,才能获取输出参数。

    来源:传智播客 视频教程。

    ROW_NUMBER() OVER函数的基本用法

    https://jingyan.baidu.com/article/9989c74604a644f648ecfef3.html

  • 相关阅读:
    google glog 使用方法
    LIBRARY_PATH和LD_LIBRARY_PATH环境变量的区别
    c++ ‘nullptr’ 在此作用域中尚未声明
    Impala 使用的端口
    忽略“Signal: SIGSEGV (Segmentation fault)”
    查看python脚本的运行pid,让python脚本后台运行
    阿里云主机运行速度慢的解决办法
    在Git.oschina.net中配置TortoiseGit使用sshkey,无需输入账号和密码
    抓取国家的学校编码数据
    CAS统一登录认证好文汇集贴
  • 原文地址:https://www.cnblogs.com/hao-1234-1234/p/8025559.html
Copyright © 2011-2022 走看看