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

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

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     }

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


 

 

 

你可能感兴趣的:(存储过程)