sql 数据库分页

这是一个简单的分页存储过程实例,返回总记录数表和查询得出的表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
create procedure [dbo].[goodfenye]
(
@tablename varchar(200),//表名称
@pageindex int ,        //当前页数
@pagesize int,          //每页显示的页数
@total int output,       //总记录数
@search varchar(200)     //查询条件
)
as
 
  begin
  declare @strsql varchar(2000)
  declare @sqlwhere varchar (1000)
  declare @sqltotal nvarchar (1000)
   
  if @search!=‘‘
    begin
      set @sqlwhere = ‘1=1 and GoodName=‘+@search
    end
  else
    begin
      set @sqlwhere =‘ 1=1 ‘
    end
 
    set  @strsql =‘select top ‘ + cast(@pagesize as varchar(20))+ ‘ * from ‘ +@tablename + ‘ where gid not in (select top ‘ + cast(@pagesize*(@pageindex-1) as varchar(20)) +‘ gid from ‘+@tablename +‘)‘
    set  @sqltotal=‘select count(1) from ‘+ @tablename
    begin
    exec sp_executesql @sqltotal,N‘@total int output‘,@total output   //返回总页数
    exec (@strsql)                                                    //返回
    end
  
 end

  C#调用存储过程如下

 public void databind()
    {

        int temp1 = Convert.ToInt32(lblCurrentPage.Text);
        DataSet ds = new System.Data.DataSet();
       
        SqlCommand mycommand = new SqlCommand();
        SqlDataAdapter asd = new SqlDataAdapter();

        asd.SelectCommand = mycommand;
        
        asd.SelectCommand.Connection = conn;
        asd.SelectCommand.CommandText = "goodfenye";
        asd.SelectCommand.CommandType = CommandType.StoredProcedure;

        conn.Open();
        SqlParameter[] par =
        {
           new  SqlParameter ("@tablename",SqlDbType.VarChar,255),
           new  SqlParameter ("@pageindex",SqlDbType.Int),
           new  SqlParameter ("@pagesize",SqlDbType.Int),
           new SqlParameter("@total",SqlDbType.Int),
           new  SqlParameter ("@search",SqlDbType.VarChar,255)

        };
        par[0].Value = "tabG_Goods";
        par[1].Value = temp1;
        par[2].Value = 5;
        par[3].Direction = ParameterDirection.Output;
        par[4].Value = this.Textname.Text;

        foreach (SqlParameter pa in par)
        {
            asd.SelectCommand.Parameters.Add(pa);
        }
        asd.Fill(ds, "ss");
        conn.Close();
        this.Repeater1.DataSource = ds.Tables[1];
        this.Repeater1.DataBind();
        int count = Convert.ToInt32(ds.Tables[0].Rows[0][0].ToString());
        this.labeltotal.Text = count.ToString();

        int j = count / 5;  //页数
        int i = count % 5;


        if (j >= 1)
        {
            if (i > 0)
            {
                j = j + 1;
            }

        }
        else
        {
            j = 1;

        }

        lblPageCount.Text = j.ToString();

    }

        不足之处请大家指正,欢迎大家和我一起探讨.net,QQ:845750322。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。