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

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

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     }

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


 

 

 

posted @ 2012-12-24 11:30  apecoder  阅读(316)  评论(0编辑  收藏  举报