Dapper中使用存储分页。

 #region 分页获取数据
        /// <summary>
        /// 分页获取数据
        /// </summary>
        /// <typeparam name="T">实体类</typeparam>
        /// <param name="selectStr">获取列</param>
        /// <param name="tableName">表名</param>
        /// <param name="pageIndex">页码</param>
        /// <param name="pageSize">每页数据量</param>
        /// <param name="strWhere">查询条件</param>
        /// <param name="key">关键字</param>
        /// <param name="orderName">排序字段</param>
        /// <param name="orderType">排序方式(非 0 值则降序)</param>
        /// <param name="groupBy">分组字段</param>
        /// <param name="RecordCount">输出查询的总数据量</param>
        /// <returns></returns>
        public List<T> GetUserAccess<T>(string selectStr, string tableName, int pageIndex, int pageSize, string strWhere, string key, string orderName, string orderType, string groupBy, ref int RecordCount)
        {
            var p = new DynamicParameters();
            p.Add("@PageIndex", pageIndex);
            p.Add("@PageSize", pageSize);
            p.Add("@Order", orderName);
            p.Add("@SelectStr", selectStr);
            p.Add("@OrderType", orderType);
            p.Add("@Groupby", groupBy);
            p.Add("@key", key);
            p.Add("@TableName", tableName);
            p.Add("@WhereCondition", strWhere);
            p.Add("@RecordCount", dbType: DbType.Int32, direction: ParameterDirection.Output);
            p.Add("@PageCount", dbType: DbType.Int32, direction: ParameterDirection.Output);
            p.Add("@error", "", dbType: DbType.String, direction: ParameterDirection.Output);

            List<T> ret = new List<T>();
            using (var conn = DbFactory.GetDbConnection("MirrorMngr"))
            {
                ret = conn.Query<T>("Pro_CommonPager", p, commandType: CommandType.StoredProcedure).ToList();
                //ret = GetCJFDData(ret);
                RecordCount = p.Get<int>("RecordCount");
            }
            return ret;
        }
        #endregion

分页存储过程。

USE [MirrorMngr]
GO

/****** Object:  StoredProcedure [dbo].[Pro_CommonPager]    Script Date: 09/16/2015 11:50:58 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:        
-- Create date: <2012-11-8>
-- Description:    <通用分页存储过程>
-- =============================================
CREATE   PROCEDURE [dbo].[Pro_CommonPager]
(
@PageIndex int,--索引页 1
@PageSize int,--每页数量2
@TableName nvarchar(500),--查询表名3
@Order  nvarchar(500),--排序的列4
@SelectStr nvarchar(500) = ‘*‘,--查询的列5
@WhereCondition Nvarchar(max)=‘‘,--查询条件6
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序 7
@Groupby NVarChar(100) = ‘‘ ,--分組 8
@RecordCount int=-1 output,--总行数 9
@PageCount int=-1 output,--总页数10
@error nvarchar(100)=‘‘ OUTPUT, --错误信息11
@key nvarchar(500)--关键字
[email protected] nvarchar(2000)=‘‘ output --错误信息11
)
AS
declare @strSQL nvarchar(max) -- 主语句
declare @strTmp nvarchar(max) -- 临时变量
declare @strOrder nvarchar(max) -- 排序类型
declare @groupByStr nvarchar(100)--分组变量
declare @whereStr nvarchar(Max)
declare @tableStr nvarchar(Max)
set @groupByStr=‘‘
set @whereStr=‘‘
set @tableStr=‘‘

    if @OrderType != 0
        begin
         set @strTmp = ‘<(select min‘
         set @strOrder = ‘ order by ‘ + @Order +‘ desc‘
        end
    else
        begin
         set @strTmp = ‘>(select max‘
         set @strOrder = ‘ order by ‘ + @Order +‘ asc‘
        end
    if @Groupby <>‘‘
        begin
            set @groupByStr=‘ group by ‘[email protected]+‘ ‘
        end
    if @WhereCondition <> ‘‘
        begin
            set @whereStr=‘ where ‘[email protected]+‘ ‘
        end

    set @tableStr=‘ ‘[email protected] + ‘ ‘ + @groupByStr + ‘ ‘ + @strOrder + ‘ ‘

    if @groupByStr <> ‘‘
      begin
        set @tableStr=‘ select  [‘ + @key + ‘] from  (select  top ‘ + str((@PageIndex-1)*@PageSize) + ‘ ‘[email protected]+‘ from ‘[email protected] +‘ ‘+ @whereStr + ‘ ‘ + @groupByStr + ‘ ‘ + @strOrder + ‘) strTable‘
      end
      else
      begin
        set @tableStr=‘ select  top ‘ + str((@PageIndex-1)*@PageSize) + ‘ [‘ + @key + ‘] from  ‘[email protected] + ‘ ‘[email protected]+‘ ‘ + @strOrder + ‘ ‘
      end

    set @strSQL = ‘select top ‘ + str(@PageSize) + ‘ ‘ + @SelectStr + ‘ from ‘
     + @TableName + ‘ where ‘ + @key + ‘ not in (‘[email protected]+ ‘)‘
     + ‘ ‘ + @groupByStr + ‘ ‘ + @strOrder   

    if @WhereCondition <> ‘‘
     set @strSQL = ‘select top ‘ + str(@PageSize) + ‘ ‘ + @SelectStr + ‘ from ‘
      + @TableName + ‘ where ‘ + @key + ‘ NOT IN (‘[email protected] + ‘) and (‘ + @WhereCondition + ‘)  ‘ + @groupByStr + ‘ ‘ + @strOrder  

    if @PageIndex = 1
        begin
         set @strSQL = ‘select top ‘ + str(@PageSize) + ‘ ‘ + @SelectStr + ‘ from ‘
          + @TableName + ‘ ‘ + @whereStr + ‘ ‘ + @groupByStr + ‘ ‘ + @strOrder
        end
    exec (@strSQL)
    if(@@error<>0)
    begin
     set @error=‘分页数据出错﹗‘;
     return;
    end
    --SET @retun= @strSQL;
--print @strSQL
 --创建一个临时表用于快速计算行数
 --create table  #tmp ( counts int );---创建临时表
 --取得总记录数   

    IF @Groupby <> ‘‘
        begin
            SET @strTmp = ‘SELECT  @RecordCount=Count(*) FROM (select ‘[email protected]+‘ from ‘ + @TableName +‘ ‘[email protected]+‘ ‘[email protected]+‘ ) groupTable‘
        end
      else
        begin
            SET @strTmp = ‘SELECT  @RecordCount=Count(*) FROM ‘+ @TableName +‘ ‘[email protected]+‘ ‘
        end

     EXEC SP_EXECUTESQL @strTmp,N‘@RecordCount int output‘,@RecordCount output  

     if(@@error<>0)
     begin
      set @error=‘分页数据出错﹗‘;
      --drop table #tmp;
      return;
     end    

 --select @RecordCount=counts from #tmp
 --SET @RecordCount = @@RowCount
  --    获取总页数
 --    "CEILING"函数:取得不小于某数的最小整数  

 SET @PageCount = CEILING(@RecordCount * 1.0 / @PageSize)   

 if(@@error<>0)
     begin
      set @error=‘分页数据出错﹗‘;
      --drop table #tmp;
     end
 return    

GO
时间: 2024-11-02 19:39:14

Dapper中使用存储分页。的相关文章

float 在内存中如何存储的

float类型数字在计算机中用4个字节存储.遵循IEEE-754格式标准:    一个浮点数有2部分组成:底数m和指数e 底数部分 使用二进制数来表示此浮点数的实际值指数部分 占用8bit的二进制数,可表示数值范围为0-255 但是指数可正可负,所以,IEEE规定,此处算出的次方必须减去127才是真正的指数.    所以,float类型的指数可从-126到128 底数部分实际是占用24bit的一个值,但是最高位始终为1,所以,最高位省去不存储,在存储中占23bit    科学计数法. 格式:SE

浮点数在内存中的存储(简述)

数据类型: 1.基本类型(整形,浮点型,字符型) 2.构造类型(数组,结构体,联合,枚举) 3.指针类型 查看数据范围:整形范围(limits.h) 浮点型类型(flaot.h) eg:有符号的char的表示范围:0000 0000~1111 1111(-128~127)其中最高位表示符号位,0为正 1为负 其实数据的存储和访问就下像作图这个圈一样,当你给它的127+1它就会变成128 整形变量: 一般来说字长为32的情况下,整形表示32位,短整形16位,长整形32位 数据在计算机中以补码的形式

Java基础知识强化之IO流笔记45:IO流练习之 把文本文件中数据存储到集合中的案例

1.  把文本文件中数据存储到集合中      需求:从文本文件中读取数据(每一行为一个字符串数据)到集合中,并遍历集合. 分析:      通过题目的意思我们可以知道如下的一些内容,      数据源是一个文本文件.      目的地是一个集合.      而且元素是字符串.      数据源:   b.txt -- FileReader -- BufferedReader  目的地:  ArrayList<String> 2. 代码示例: 1 package cn.itcast_02; 2

堆栈详解(数据与内存中的存储方式)

转自:http://www.360doc.com/content/11/0428/18/6580811_112988089.shtml char* r = "hello word!"; char b[]="hello word!"*r = 'w'; *b='w'; 其实应该是语法错误,可是VC++6.0没有警告或者错误,r指向的是文字常量区,此区域是编译的时候确定的,并且程序结束的时候自动释放的, *r = 'w';企图修改文字常量区引起错误,b的区别在于其空间是在

移码及浮点数在内存中的存储方式

首先说一下十进制的小数怎么转化为二进制的小数,计算机根本就不认识10进制的数据,他只认识0和1,所以,10进制的小数在计算机中是用二进制的小数表示的. 十进制的小数转化为二进制的小数的方法: 可以简单的概括为正序取整,将十进制的小数部分乘以2,然后取整数部分. 例如将0.2转化为二进制的小数,那么0.2*2=0.4,其整数部分是0,所以二进制小数的第一位为0,然后0.4*2=0.8,其整数部分是0,所以二进制小数的第二位为0,然后0.8*2=1.6,其整数部分是1,所以二进制小数的第三位是1,然

转!!MySQL中的存储引擎讲解(InnoDB,MyISAM,Memory等各存储引擎对比)

MySQL中的存储引擎: 1.存储引擎的概念 2.查看MySQL所支持的存储引擎 3.MySQL中几种常用存储引擎的特点 4.存储引擎之间的相互转化 一.存储引擎: 1.存储引擎其实就是如何实现存储数据,如何为存储的数据建立索引以及如何更新,查询数据等技术实现的方法. 2.MySQL中的数据用各种不同的技术存储在文件(或内存)中,这些技术中的每一种技术都使用不同的存储机制,索引技巧,锁定水平并且最终提供广泛的不同功能和能力.在MySQL中将这些不同的技术及配套的相关功能称为存储引擎. 二.MyS

一个 -100.01 的double 在内存中怎么存储的. 一个中文String 在内存中占多少直接 utf-8 / GBK

一.-100.01 的double 在内存中怎么存储的 double双精度数据类型存储格式IEEE 双精度格式为8字节64位,由三个字段组成:52 位小数 f : 11 位偏置指数 e :以及 1 位符号 s.这些字段连续存储在两个 32 位字中 二.一个中文String 在内存中占多少直接 utf-8 / GBK [腾讯实习生问到这个问题,当时还天真的回答unicode字符集和16位,哎...] GBK:1个ASCII码占1个字节,而1个汉字编码占2个字节. UTF:ASCII对应的字符在UT

优化MD5在(MySQL)数据库中的存储

1.MD5在MySQL数据库中的存储 用CHAR(32)来存储MD5值是一个常见的技巧.如果你的应用程序使用VARCHAR(32),则对每个值得字符串长度都需要花费额外的不 必要的开销.这个十六进制的值可以使用UNHEX()和HEX()函数来存储在BINARY(16)在BINARY(16)数据类型的中且更为高效.用这 种转换可以让每行占用的存储空间从32字节减少到16字节. 下面的示例展示了原始MD5以及压缩后的MD5占用的空间对比: 这个原则也适用其他16进制的值,例如为所有列的散列值而定义的

结构体在内存中的存储方式

结构体在内存中如何存储? 遵循结构体对齐规则: 1.首先要知道默认对齐数:VS 中 8   Linux 中4 2.第一个成员放到0偏移处 3.后面所有的成员都放到对齐数(本身和默认对齐数的较小值)的倍数处偏移 4.结构体总大小为所有对齐数中最大对齐数的倍数 Eg: 运行结果为 24 图中可以看出内存有浪费,而我们将小的成员放一起可以节省资源 减少浪费. 上例可以改为: int i: char c: double d: 这样总大小只需16 节省浪费. 空的结构体类型大小为1,创建对象需要开辟空间,