入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

通用分页存储过程的使用

创建时间:2013-09-10 投稿人: 浏览次数:1528
看着同事写的通用分页存储过程觉得还不错,分享给大家
1、存储过程 USE [test] GO /****** Object:  StoredProcedure [dbo].[ads_GetAll]    Script Date: 07/04/2013 16:00:48 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo]. [ads_GetAll]   -- 通用分页存储过程 @TableName varchar (50),          --表名 @Fields varchar (5000),      --字段名 (全部字段为*) @OrderField varchar (5000),          --排序字段( 必须!支持多字段 ) @sqlWhere varchar (5000), --条件语句( 不用加where) @pageSize int ,                     --每页多少条记录 @pageIndex int = 1 ,             --指定当前为第几页 @COUNT int output             --返回总页数 as begin      Begin Tran --开始事务
     Declare @sql nvarchar( 4000);      Declare @totalRecord int;    
     --计算总记录数               if (@SqlWhere ="" or @sqlWhere =NULL)          set @sql = "select @totalRecord = count(*) from " + @TableName      else          set @sql = "select @totalRecord = count(*) from " + @TableName + " where " + @sqlWhere
     EXEC sp_executesql @sql, N"@totalRecord int OUTPUT",@totalRecord OUTPUT--计算总记录数                 --计算总页数      select @COUNT =CEILING(( @totalRecord+0.0 )/@PageSize)
     if (@SqlWhere ="" or @sqlWhere =NULL)          set @sql = "Select * FROM (select ROW_NUMBER() Over(order by " + @OrderField + ") as rowId," + @Fields + " from " + @TableName      else          set @sql = "Select * FROM (select ROW_NUMBER() Over(order by " + @OrderField + ") as rowId," + @Fields + " from " + @TableName + " where " + @SqlWhere                     --处理页数超出范围情况      if @PageIndex <=0          Set @pageIndex = 1          if @pageIndex >@COUNT          Set @pageIndex = @COUNT
      --处理开始点和结束点      Declare @StartRecord int      Declare @EndRecord int          set @StartRecord = (@pageIndex- 1)*@PageSize + 1      set @EndRecord = @StartRecord + @pageSize - 1
     --继续合成sql 语句      set @Sql = @Sql + ") as " + @TableName + " where rowId between " + Convert(varchar (50), @StartRecord) + " and " +   Convert(varchar (50), @EndRecord)          Exec(@Sql )      ---------------------------------------------------      If @@Error <> 0        Begin          RollBack Tran          Return - 1        End       Else        Begin          Commit Tran          Return @totalRecord ---返回记录总数        End    end


2、数据处理层中:      /// <summary>         /// 获取分析师信息并分页         /// </summary>         /// <param name="pageSize">每页页数</param>         /// <param name="count">总个数</param>         /// <returns></returns>         public List<Ads_Analyst> ads_Analyst_GetAll(int pageIndex, int pageSize, string where, out int count)         {             List<Ads_Analyst> list = new List<Ads_Analyst>();             IDataReader reader = null;             IDataParameter[] parameters =                               Helper.GetParameter("@COUNT", DbType.Int32, ParameterDirection.Output),                Helper.GetParameter("@ReturnValue",DbType.Int32,ParameterDirection.ReturnValue),                Helper.GetParameter("@PAGESIZE", DbType.Int16,pageSize),                Helper.GetParameter("@PAGEINDEX", DbType.Int16,pageIndex),                Helper.GetParameter("@sqlWhere", DbType.String,where),                Helper.GetParameter("@TableName", DbType.String,"ads_Analyst"),                Helper.GetParameter("@Fields", DbType.String,"[ID],[AnalystName],[Picture],[JobTitle],[Trade],[Introduction],[Status],[AddTime],[EditTime]"),                Helper.GetParameter("@OrderField", DbType.String,"AddTime desc"),             };             try             {                 reader = Helper.ExecuteReader                 (                     ConnectToADS,                     CommandType.StoredProcedure,                     "ads_GetAll",                     parameters                 );                 
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
  • 上一篇:没有了
  • 下一篇:没有了
未上传头像