创建存储过程

  1. Create PROCEDURE [dbo].[PROCE_SQL2005PAGECHANGE] 
  2. @TableName varchar(50),            --表名 
  3. @ReFieldsStr varchar(200) = '*',   --字段名(全部字段为*) 
  4. @OrderString varchar(200),         --排序字段(必须!支持多字段不用加order by) 
  5. @WhereString varchar(500) =N''--条件语句(不用加where) 
  6. @PageSize int,                     --每页多少条记录 
  7. @PageIndex int = 1 ,               --指定当前为第几页 
  8. @TotalRecord int output            --返回总记录数 
  9. AS 
  10.  
  11. BEGIN    
  12.  
  13.     --处理开始点和结束点 
  14.     Declare @StartRecord int
  15.     Declare @EndRecord int
  16.     Declare @TotalCountSql nvarchar(500); 
  17.     Declare @SqlString nvarchar(2000);    
  18.     set @StartRecord = (@PageIndex-1)*@PageSize + 1 
  19.     set @EndRecord = @StartRecord + @PageSize - 1 
  20.     SET @TotalCountSql= N'select @TotalRecord = count(*) from ' + @TableName;--总记录数语句 
  21.     SET @SqlString = N'(select row_number() over (order by '+ @OrderString +') as rowId,'+@ReFieldsStr+' from '+ @TableName;--查询语句 
  22.     -- 
  23.     IF (@WhereString! = '' or @WhereString!=null
  24.         BEGIN 
  25.             SET @TotalCountSql=@TotalCountSql + ' where '+ @WhereString; 
  26.             SET @SqlString =@SqlString+ ' where '+ @WhereString;            
  27.         END 
  28.     --第一次执行得到 
  29.     --IF(@TotalRecord is null) 
  30.     --   BEGIN 
  31.            EXEC sp_executesql @totalCountSql,N'@TotalRecord int out',@TotalRecord output;--返回总记录数 
  32.     -- END 
  33.     ----执行主语句 
  34.     set @SqlString ='select * from ' + @SqlString + ') as t where rowId between ' + ltrim(str(@StartRecord)) + ' and ' + ltrim(str(@EndRecord)); 
  35.     Exec(@SqlString)    
  36. END 


 

C#中调用方法


 

  1. private static readonly string ConnString = "";//你懂的 
  2.  
  3.        /// <summary> 
  4.        /// 存储过程分页查询 
  5.        /// </summary> 
  6.        /// <param name="TableName">表名</param> 
  7.        /// <param name="ReFieldsStr">字段名(全部字段为*)</param> 
  8.        /// <param name="OrderString">排序字段(必须!支持多字段不用加order by)</param> 
  9.        /// <param name="WhereString">条件语句(不用加where)</param> 
  10.        /// <param name="index">每页多少条记录</param> 
  11.        /// <param name="pagesize">指定当前为第几页</param> 
  12.        /// <param name="pg">返回总记录数</param> 
  13.        /// <returns></returns> 
  14.        public static DataSet Select_Certificate(string TableName, string ReFieldsStr, string OrderString, string WhereString, int index, int pagesize, ref int pg) 
  15.        { 
  16.            int i = 0; 
  17.            SqlConnection sqlCon = new SqlConnection(ConnString); 
  18.            SqlDataAdapter da = new SqlDataAdapter("PAGECHANGE", sqlCon); 
  19.            SqlParameter para0 = new SqlParameter("@TableName", TableName); 
  20.            SqlParameter para1 = new SqlParameter("@ReFieldsStr", ReFieldsStr); 
  21.            SqlParameter para2 = new SqlParameter("@OrderString", OrderString); 
  22.            SqlParameter para3 = new SqlParameter("@WhereString", WhereString); 
  23.            SqlParameter para4 = new SqlParameter("@PageSize", pagesize); 
  24.            SqlParameter para5 = new SqlParameter("@PageIndex", index); 
  25.            SqlParameter outputpara = new SqlParameter("@TotalRecord", SqlDbType.Int); 
  26.            outputpara.Direction = ParameterDirection.Output; 
  27.            da.SelectCommand.Parameters.Add(para0); 
  28.            da.SelectCommand.Parameters.Add(para1); 
  29.            da.SelectCommand.Parameters.Add(para2); 
  30.            da.SelectCommand.Parameters.Add(para3); 
  31.            da.SelectCommand.Parameters.Add(para4); 
  32.            da.SelectCommand.Parameters.Add(para5); 
  33.            da.SelectCommand.Parameters.Add(outputpara); 
  34.            da.SelectCommand.CommandType = CommandType.StoredProcedure; 
  35.            DataSet ds = new DataSet(); 
  36.            try 
  37.            { 
  38.                sqlCon.Open(); 
  39.                da.Fill(ds); 
  40.                i = Convert.ToInt32(outputpara.Value); 
  41.                if (i % pagesize > 0) 
  42.                { 
  43.                    pg = i / pagesize + 1; 
  44.                } 
  45.                else 
  46.                { 
  47.                    pg = i / pagesize; 
  48.                } 
  49.            } 
  50.            catch (Exception ex) 
  51.            { 
  52.                throw new Exception(ex.Message, ex); 
  53.            } 
  54.            finally 
  55.            { 
  56.                sqlCon.Close(); 
  57.                sqlCon.Dispose(); 
  58.            } 
  59.            return ds; 
  60.        }