• 一个最简单的存储过程分页


     学习存储过程,先做一个最简单的分页存储过过程吧!

    create proc usp_fenyue  --定义存储过程名
      @pageindex int,     --定义参数当前页
      @pagesize int,      --定义参数每页多少行
      @pagecount int output   --定义一个输出参数,总页数
      as
      declare @count int   --定义一个参数,查询总共多少行

       --分页查询
      select * from (select *,ROW_NUMBER() over(order by id)as number from tab2)as A
      where number between (@pagesize*(@pageindex-1)+1) and @pageindex*@pagesize
     

    --查询总页数
        select @count=COUNT(*) from tab2  
        set @pagecount=ceiling(@count*1.0/@pagesize)

        select @pagecount

    --在sqlserver 执行存储过程

      declare @dd int
     
     exec usp_fenyue 1,3, @dd output      -- 有几个参数就写几个参数,注意写输出参数的时候,要定义变量,要写上output!

    现在一个最简单的分页存储过程就写完了,然后我们在页面调用!

      还是先建一个最简单的aspx页面,如下,

     1 <div>
     2         <asp:GridView ID="GridView1" runat="server">
     3         </asp:GridView><br/>
     4         <asp:Button ID="Butshang" runat="server" Text="上一页" onclick="Butshang_Click" />
     5         <asp:Button ID="Butxia"
     6             runat="server" Text="下一页" onclick="Butxia_Click" /> 
     7         <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
     8     </div>
     9     <asp:HiddenField ID="HiddenField1" runat="server" />
    10     <asp:HiddenField ID="HiddenField2" runat="server" />

    然后写后台代码,这里没有使用3层来做,用的最基础的方法做的分页,这样可更好的去学习ADO.NET的底层

     1  public partial class WebForm3 : System.Web.UI.Page
     2     {
     3         int pageindex = 1; //起始页
     4         int pagesize = 3;  //每页多少条
     5         int pagecount = 0; //一共多少页
     6         string connstr = @"Data Source=JYZ\SQL2008;Initial Catalog=123;User ID=sa;Password=123456"; //数据库连接字符串
     7         protected void Page_Load(object sender, EventArgs e)
     8         {
     9             if (!IsPostBack) 
    10             {
    11                 BidGiv();
    12             }
    13         }
    14 
    15         /// <summary>
    16         /// 绑定GridView
    17         /// </summary>
    18         private void BidGiv()
    19         {
    20             using (SqlConnection conn = new SqlConnection(connstr)) //打开连接
    21             {
    22                 using (SqlCommand cmd = new SqlCommand("usp_fenyue", conn)) //执行方法
    23                 {
    24                     cmd.CommandType = CommandType.StoredProcedure; //执行存储过程usp_fenyue
    25 
    26                     //创建存储过程所需要的参数
    27                     SqlParameter[] param ={ 
    28                                     new SqlParameter("@pageindex",SqlDbType .Int),
    29                                     new SqlParameter ("@pagesize",SqlDbType .Int ),
    30                                     new SqlParameter ("@pagecount",SqlDbType .Int )
    31                     
    32                     }; 
    33 
    34                     param[0].Value = pageindex;
    35                     param[1].Value = pagesize;
    36                     param[2].Direction = ParameterDirection.Output; //输出参数
    37 
    38 
    39                     cmd.Parameters.AddRange(param); //把参数加到执行方法中
    40 
    41                     SqlDataAdapter sb = new SqlDataAdapter(cmd); //创建一个数据集
    42 
    43                     DataTable tb = new DataTable(); //创建一个TataTable存放数据
    44                    
    45 
    46                     sb.Fill(tb);  //把查询出来的数据放到tb中
    47 
    48                     GridView1.DataSource = tb; //把tb绑定到GridView1中
    49                     GridView1.DataBind();
    50 
    51                     pagecount = Convert.ToInt32(param[2].Value); //得到总页数
    52 
    53                     this.HiddenField1.Value = pagecount.ToString(); //保存总页数在分页时用
    54                     this.HiddenField2.Value = pageindex.ToString(); //保存当前页在分页时用
    55 
    56                     this.Label1.Text = "当前页" + pageindex +"/"+ "总页数" + pagecount; 
    57                 }
    58             }
    59         
    60         }
    61         /// <summary>
    62         /// 上一页
    63         /// </summary>
    64         /// <param name="sender"></param>
    65         /// <param name="e"></param>
    66         protected void Butshang_Click(object sender, EventArgs e)
    67         {
    68             if (Convert.ToInt32(this.HiddenField2.Value) > 1)//如果当前页大于1,就把当前页减1,再绑定
    69             {
    70                 pageindex = Convert.ToInt32(this.HiddenField2.Value) - 1;
    71                 BidGiv();
    72             }
    73 
    74         }
    75         /// <summary>
    76         /// 下一页
    77         /// </summary>
    78         /// <param name="sender"></param>
    79         /// <param name="e"></param>
    80         protected void Butxia_Click(object sender, EventArgs e)
    81         {
    82             if (Convert .ToInt32(this.HiddenField2.Value) < Convert.ToInt32(this.HiddenField1.Value))
    83             {
    84                 pageindex = Convert.ToInt32(this.HiddenField2.Value) + 1;//如果当前页小于总页,就把当前页加1,再绑定
    85                 BidGiv();
    86             }
    87         }
    88     }

    运行页面,一个用存储过程做的分页,就做好了!


     

  • 相关阅读:
    微信分享链接出现config:invalid signature错误的解决方法
    微信开发,分享部分出现的问题
    thinkphp 3.2 去除调试模式后报错,怎么解决
    MySQL添加新用户、为用户创建数据库、为新用户分配权限
    xshell工具source导入几个G的数据库
    thinkphp5引入公共部分header、footer等
    用样本估计总体
    随机抽样
    平面几何相关定理
    直线和曲线相切,曲线和曲线相切
  • 原文地址:https://www.cnblogs.com/xu3593/p/2830727.html
Copyright © 2020-2023  润新知