同上

解决方案 »

  1.   

    调用分页存储过程函数
    /// <summary>
    /// 分页显示程序
    /// </summary>aa
    /// <param name="tablename">查询用的表名</param>
    /// <param name="pagesize">每页显示的记录数</param>
    /// <param name="currentpage">要显示的页数</param>
    /// <param name="where">查询的条件</param>
    /// <param name="columnorder">排序的列</param>
    /// <returns>总记录数</returns>
    /// <returns>总页数</returns>
    public DataSet DsCutPage(string tablename,int pagesize,int currentpage,string where,string columnorder,out double recordCount,out double pageCount)
    {
    SqlCommand cmd = new SqlCommand("cutpage_record",sqlConn_R);
    cmd.CommandType = CommandType.StoredProcedure;

    SqlParameter p7 = cmd.Parameters.Add("@RecordCount",SqlDbType.Int);
    p7.Direction = ParameterDirection.Output; SqlParameter p8 = cmd.Parameters.Add("@pageCount",SqlDbType.Int);
    p8.Direction = ParameterDirection.Output; SqlParameter p = cmd.Parameters.Add("@QueryStr",SqlDbType.NVarChar,100);
    p.Value = tablename; SqlParameter p1 = cmd.Parameters.Add("@PageSize",SqlDbType.Int);
    p1.Value = pagesize; SqlParameter p2 = cmd.Parameters.Add("@PageCurrent",SqlDbType.Int);
    p2.Value = currentpage; SqlParameter p3 = cmd.Parameters.Add("@FdShow",SqlDbType.NVarChar,1000);
    p3.Value = "*"; SqlParameter p5 = cmd.Parameters.Add("@WhereStr",SqlDbType.NVarChar,4000);
    p5.Value = where; SqlParameter p6 = cmd.Parameters.Add("@FdOrder",SqlDbType.NVarChar,100);
    p6.Value = columnorder; DataSet ds = new DataSet();
    SqlDataAdapter da  = new SqlDataAdapter();
    da.SelectCommand = cmd; da.Fill(ds); recordCount = double.Parse(da.SelectCommand.Parameters["@RecordCount"].Value.ToString());
    pageCount = double.Parse(da.SelectCommand.Parameters["@PageCount"].Value.ToString()); return ds;
    }
    分页存储过程
    CREATE proc cutpage_record
    @RecordCount int output,  --返回总记录数
    @QueryStr nvarchar(100),--表名、视图名、查询语句
    @PageSize int,  --每页的大小(行数)
    @PageCurrent int,  --要显示的页
    @FdShow nvarchar (1000), --要显示的字段列表
    @WhereStr nvarchar (4000),
    @FdOrder nvarchar(100), --排序
    @PageCount  int output   --返回总页数
    as
    declare
    @sql nvarchar(4000)
    set @sql = ''
    if @WhereStr = '' begin
    set @WhereStr = '1=1'
    end
    if @FdShow = '' begin
    set @FdShow = '*'
    enddeclare @tsql nvarchar (200)set @tsql=N'select @RecordCount = count(*) from ' + @QueryStr + ' where ' + @WhereStr
    exec sp_executesql @tsql,N'@RecordCount int output',@RecordCount output
    set @pageCount=ceiling(@recordCount*1.0/@pageSize)
    if @PageCurrent = 1 begin
    set @sql = 'select top ' + cast(@PageSize as nvarchar(3)) + ' ' + @FdShow + ' from ' + @QueryStr + ' where ' + @WhereStr  +' order by ' + @FdOrder + ' desc'
    end
    else begin
      set @sql = 'select top ' + cast(@PageSize as nvarchar(3)) + ' ' + @FdShow + ' from ' + @QueryStr + ' where ' + @WhereStr + ' and ' + @FdOrder + '< ( select min(' + @FdOrder + ') from (select top ' + cast(@PageSize*(@PageCurrent-1) as nvarchar(10)) + ' ' + @FdOrder + ' from ' + @QueryStr + ' where ' + @WhereStr + ' order by ' + @FdOrder + ' desc'+  ') as t) order by ' + @FdOrder +' desc'
    end 
    --print @sql
    execute(@sql)
    GO