set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
/*
作者:许松
CompanyName: 深圳神话时代网络
Date: 2010-11-03
*/
ALTER PROCEDURE [dbo].[SP_Pagination]
 -- Add the parameters for the stored procedure here
 --<@Param1, sysname, @p1> <Datatype_For_Param1, , int> = <Default_Value_For_Param1, , 0>, 
 --<@Param2, sysname, @p2> <Datatype_For_Param2, , int> = <Default_Value_For_Param2, , 0>
 
 @strTableName varchar(2000) = '',  --查询的表
 @strWhere varchar(500) = '',   --查询条件 
 @strSelectColumns varchar(1000) = '*', --需要得到的字段 
 @currentPage int=1,    --当前页页码
 @pageSize int =12,    --设置页面的大小
 @orderby varchar(400) = 'ID',  --排序的字段名 (即 order by column asc/desc) 
 @PKName varchar(50) = 'Id',  --主键名称 
 @total int output    --记录总数
AS
BEGIN
 -- SET NOCOUNT ON added to prevent extra result sets from
 -- interfering with SELECT statements.
 declare @startRow int
 declare @endRow int
 declare @strsql nvarchar(4000)
set @strsql = 'select @total= count('+@PKName+') from ' + @strTableName + @strWhere
 exec sp_executesql @strsql,N'@total int output',@total output
 
 if @orderby is null or @orderby = ''
  begin
   set @orderby='Order by '+@PKName
  end
 
 if @currentPage >0 and @pageSize >0
 begin
  set @startRow = (@currentPage-1) * @pageSize 
  set @endRow = @currentPage * @pageSize
  set @strsql = N'select * from (select  ROW_NUMBER() OVER ('+@orderby+') AS RowNum ,'+@strSelectColumns+' from '+ @strTableName + 
  @strWhere +') as mainTable Where mainTable.RowNum>'+Convert(varchar(15),@startRow)+' and mainTable.RowNum<='+Convert(varchar(15),@endRow)
  
 
 end
 else 
  set @strsql = N'select * from (select ROW_NUMBER() OVER ('+@orderby+') AS RowNum ,'+@strSelectColumns+' from '+ @strTableName + @strWhere +') as mainTable'
  
  EXECUTE sp_executesql @strsql
print @strsql  
  --
 --select @strsql
END
//----------------------------------------------- 调用 ---------------
  /// <summary>
  /// 执行分页存储过程方法
  /// </summary>
  /// <param name="strTableName">要查询的表名称和连接的表</param>
  /// <param name="strWhere">Where查询条件</param>
  /// <param name="strSelectColumns">需要选择查询的列名</param>
  /// <param name="CurrentPageIndex">当前页码</param>
  /// <param name="PageSize">每页的记录数大小</param>
  /// <param name="strOrderBy">Order By 排序语句</param>
  /// <param name="PKName">主查询表的主键名称</param>
  /// <param name="TotalCount">记录总数</param>
  /// <returns></returns>
  public static DataSet ExecPagenationSP(string strTableName,string strWhere,string strSelectColumns,int iCurrentPage,int iPageSize,string strOrderBy,string strPKName)
  {
   DataSet ds= new DataSet ();
SqlConnection sqlCon = new SqlConnection(SqlHelper.ConnectionString);
sqlCon.Open();
   try
   {
    SqlParameter[] m_SqlParameters = new SqlParameter[8];
    if (!string.IsNullOrEmpty(strTableName))
    {
     m_SqlParameters[0] = new SqlParameter("@strTableName", strTableName);
    }
    else
    {
     m_SqlParameters[0] = new SqlParameter("@strTableName",null);
    }
    if (!string.IsNullOrEmpty(strWhere))
    {
     m_SqlParameters[1] = new SqlParameter("@strWhere", strWhere);
    }
    else
    {
     m_SqlParameters[1] = new SqlParameter("@strWhere",null);
    }
    if (!string.IsNullOrEmpty(strSelectColumns))
    {
     m_SqlParameters[2] = new SqlParameter("@strSelectColumns", strSelectColumns);
    }
    else
    {
     m_SqlParameters[2] = new SqlParameter("@strSelectColumns",null);
    }
    m_SqlParameters[3] = new SqlParameter("@currentPage",iCurrentPage);
m_SqlParameters[4] = new SqlParameter("@pageSize",iPageSize);
    if (!string.IsNullOrEmpty(strOrderBy))
    {
     m_SqlParameters[5] = new SqlParameter("@orderby", strOrderBy);
    }
    else
    {
     m_SqlParameters[5] = new SqlParameter("@orderby",null);
    }
    if (!string.IsNullOrEmpty(strPKName))
    {
     m_SqlParameters[6] = new SqlParameter("@PKName", strPKName);
    }
    else
    {
     m_SqlParameters[6] = new SqlParameter("@PKName",null);
    }
    m_SqlParameters[7] = new SqlParameter("@total",0);
m_SqlParameters[7].Direction = ParameterDirection.Output;
rs.DataResult = SqlHelper.ExecuteDataset(sqlCon, CommandType.StoredProcedure, "SP_Pagination", m_SqlParameters);
int iTotal = DataConvert.GetInt32Value(m_SqlParameters[7].Value);
rs.pageInfo = new PageInfo(iCurrentPage, iPageSize, iTotal);
    rs.IsSuccess = true;
   }
   catch (Exception ex)
   {
    rs.IsSuccess = false;
    rs.Msg = ex.Message;
    throw ex;
   }
   finally
   {
    if (sqlCon.State == System.Data.ConnectionState.Open)
    {
     sqlCon.Close();
    }
    sqlCon.Dispose();
   }
   return ds;
  }
 
                    
                 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号