MSSQL根据表名动态分页的存储过程以及C#.net调用使用

原创 2012年11月16日 20:15:22

2012-07-06 19:44

MSSQL根据表名进行动态分页的sql存储过程:

该存储过程中操作的表需要设置主键,否则分页出错....


 


--动态按表名分页--
alter proc ShowPageByTable
 @tableName varchar(40),
 @pageIndex int=1 ,
 @pageSize int=10,
 @pageCount int =0 output
as
begin
--声明起始和结束的行号
 declare @start int, @end int,@pkey varchar(20)
 --创建临时表存储传入的主键
 create table #temp 
  ( 
  tab_qu varchar(20),owenr varchar(20),tablename varchar(20),
  cname varchar(20),keys int,pname varchar(20)
  )
  insert #temp
  exec sp_pkeys @tablename --获取该表主键的的系统存储过程
  select @pkey=cname from #temp --设置主键

    --设置起始和结束坐标
 set @start=(@pageIndex-1 )*@pageSize +1 
set @end =@pageIndex * @pageSize
 
--动态执行SQL语句,查询所需数据(如果该查询语句有需要其他约束,则需要传入其他约束条件)
    exec('
  select ROW_NUMBER() over(order by '+@pkey+') as RowID,*  into #OrderTemp 
  from ' + @tableName +' 
     select * from #OrderTemp
 where RowID between ' +@start + ' and '+ @end)
 
--执行一次全表查询,判断分页的总页数
 exec('select * into #ss from '+@tableName)
 set @pageCount= @@ROWCOUNT/@pageSize
 
if(@@ROWCOUNT%@pageSize!=0)
  set @pageCount=@pageCount+1
 end   


 

C#调用代码:


  /// <summary>
        /// 根据表名分页,不获取分页的总页数
        /// </summary>
        /// <param name="tablename">表名</param>
        /// <param name="pageIndex">页码</param>
        /// <param name="pageSize">每页显示行数</param>
        /// <returns>该页的数据集</returns>
        public static DataSet GetDataByNamePage(string tablename, int pageIndex,int pageSize)
        {
            DataSet ds = new DataSet();
            using (sqlconn)
            {
                int count=0;
                ds= GetDataByNamePage(tablename, pageIndex, pageSize, out count);
            }
            return ds;
 
        }
        /// <summary>
        /// 根据表名分页,包含输出参数总页数
        /// </summary>
        /// <param name="tablename">表名</param>
        /// <param name="pageIndex">页码</param>
        /// <param name="pageSize">每页显示行数</param>
        /// <param name="pagetCount">输出参数:分页的总页数</param>
        /// <returns>该页的数据集</returns>
        public static DataSet GetDataByNamePage(string tablename, int pageIndex, int pageSize,out int pagetCount)
        {
            DataSet ds = new DataSet();
            using (sqlconn)
            {
                sqlconn = new SqlConnection(connstr);
                sqlconn.Open();
                SqlDataAdapter sda = new SqlDataAdapter("ShowPageByTable", sqlconn);
                sda.SelectCommand.CommandType = CommandType.StoredProcedure;
                sda.SelectCommand.Parameters.AddWithValue("@tableName", tablename);
                sda.SelectCommand.Parameters.AddWithValue("@pageIndex", pageIndex);
                sda.SelectCommand.Parameters.AddWithValue("@pageSize", pageSize);
                sda.SelectCommand.Parameters.Add("@pageCount", SqlDbType.Int);
                sda.SelectCommand.Parameters["@pageCount"].Direction = ParameterDirection.Output;

                if (ds.Tables[tablename] != null)
                    ds.Tables[tablename].Clear();
                sda.Fill(ds, tablename);

                pagetCount = (int)sda.SelectCommand.Parameters["@pageCount"].Value;
            }
            return ds;

        }

 


 

相关文章推荐

自定义分页存储过程 及VB.NET 调用

ALTER PROCEDURE [dbo].[GetRecordFromPage]     @tblName      nvarchar(255),       -- 表名     @fldNam...

C#.NET使用存储过程

  • 2008年09月16日 13:26
  • 2KB
  • 下载

asp.net(C#)海量数据表高效率分页算法(易懂,不使用存储过程)

首先创建一张表(要求ID自动编号): createtableredheadedfile( idintidentity(1,1), filenamesnvarchar(20), sendusern...
  • wyh0318
  • wyh0318
  • 2012年04月18日 09:18
  • 248

存储过程分页 .NET

  • 2012年08月30日 10:32
  • 21KB
  • 下载

asp.net之DataList的使用方法,及分页(存储过程创建),编辑,更新,删除

using System; using System.Collections.Generic; using System.Linq; using System.Web; using Syste...

asp.net(C#)海量数据表高效率分页算法(易懂,不使用存储过程)

前台代码片段如下(webform8.aspx): WebForm8

ASP.NET 存储过程分页

  • 2013年12月04日 10:09
  • 1.42MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MSSQL根据表名动态分页的存储过程以及C#.net调用使用
举报原因:
原因补充:

(最多只允许输入30个字)