最好用的兼容多种数据库通用高效的大数据分页功能

2023-11-13

通用权限管理系统底层有一个通用分页查询功能,该功能可实现多种数据库的查询,支持多表关联分页查询,目前是最完善的分页功能实现。

下面代码是使用的方法截图:

///

后台代码截图1

///

后台代码截图2

///

后台代码截图3

///

后台代码截图4

 

///

 

后台代码截图5

///

页面后台代码实现参考:

    public partial class TabSite : AuthBasePage
    {

        /// <summary>
        /// 使用吉日嘎拉通用权限管理系统底层功能实现的分页查询
        /// 支持多表联合关联分页查询
        /// 
        /// <author>
        ///     <name>宋彪</name>
        ///     <date>2014.08.07</date>
        /// </author>   
        /// </summary>
     

        /// <summary>
        /// 页码
        /// </summary>
        protected int pageNo = 1;
        /// <summary>
        /// 页容量
        /// </summary>
        protected int pageSize = 10;
        /// <summary>
        /// 查询主表
        /// </summary>
        protected string tableName = "UserInfo A";
        /// <summary>
        /// 总记录
        /// </summary>
        protected int totalRows;
        /// <summary>
        /// 排序
        /// </summary>
        protected string sort = BasePage.RequestString("sort", "SITE_CODE");
        /// <summary>
        /// 排序方向
        /// </summary>
        protected string direction = BasePage.RequestString("direction", "asc");
        /// <summary>
        /// 查询关键词
        /// </summary>
        protected string searchKey = RequestString("searchKey");
        /// <summary>
        /// 输出模式
        /// </summary>
        protected string outPutMode = RequestString("outPutMode", "pagerlist");

        protected void Page_Load(object sender, EventArgs e)
        {
            List<KeyValuePair<string, object>> dbParameters = new List<KeyValuePair<string, object>>();
            List<string> listWhere = new List<string>();
            string conditions = string.Empty;
            //具体排序
            string orderBy = " B." + sort + " " + direction;
            //输出字段控制
            string selectField = " B.CODE,B.NAME,B.AREA_NAME,B.TYPE,-1 as DISTANCE ";
            string connectionString = ConfigHelper.GetConfigString("ConnectionStringWeb");
            IDbHelper dbHelper = new OracleHelper(connectionString);

            tableName = " UserInfo A LEFT JOIN UserContact B ON A.ID = B.Uid  ";
            orderBy = " B." + sort + " " + direction;

            if (!string.IsNullOrWhiteSpace(searchKey))
            {
                string searchKeytmp = searchKey;
                if (searchKey.IndexOf("%") < 0)
                {
                    searchKeytmp = string.Format("%{0}%", searchKey);
                }
                listWhere.Add("( B.SITE_CODE LIKE " + dbHelper.GetParameter("searchKey") + "or B.SITE_NAME LIKE " + dbHelper.GetParameter("searchKey") + " or B.MANAGER LIKE " + dbHelper.GetParameter("searchKey") + ")");
                dbParameters.Add(new KeyValuePair<string, object>("searchKey", searchKeytmp));
            }
            if (listWhere.Count > 0)
            {
                conditions = string.Join(" and ", listWhere.ToArray());
            }


            if (string.Equals(outPutMode, "pagerlist", StringComparison.OrdinalIgnoreCase))
            {
                //页面分页数据 
                pageNo = BasePage.RequestInt32("pageNo", 1);
                pageSize = BasePage.RequestInt32("pageSize", 10);
                //DataTable dt = CommonManager.GetDataTableByPage(dbHelper, out totalRows, tableName, selectField, pageNo, pageSize, conditions, dbParameters, orderBy);
                DataTable dt = DbLogic.GetDataTableByPage(dbHelper, out totalRows, tableName, selectField, pageNo, pageSize, conditions, dbParameters, orderBy);
                this.dataList.DataSource = dt;
                this.dataList.DataBind();
            }
            else if (string.Equals(outPutMode, "dropdownjson", StringComparison.OrdinalIgnoreCase))
            {
                Response.ContentType = "application/json";
                //下拉数据
                selectField = " QUOTE_NAME as \"key\",QUOTE_ID as \"value\" ";
                DataTable dtResult = DbLogic.GetDataTable(dbHelper, tableName, dbParameters, conditions, 0, orderBy, selectField);
                //CommonManager.GetDataTable(dbHelper, tableName, dbParameters, conditions, 0, orderBy, selectField);
                StringBuilder jsonString = new StringBuilder();
                jsonString.Append("{\"list\":" + DataTableHelper.DataTable2Json(dtResult) + ",");
                span = DateTime.Now - begin;
                jsonString.Append("\"span\":\"" + span.TotalMilliseconds + "\"");
                jsonString.Append("}");
                Response.Write(jsonString);
                Response.End();
            }
            else if (string.Equals(outPutMode, "gridjson", StringComparison.OrdinalIgnoreCase))
            {
                Response.ContentType = "application/json";
                //grid的分页数据
                pageNo = RequestInt32("pager.pageNo", 1);
                pageSize = RequestInt32("pager.pageSize", 10);
                //DataTable dt = CommonManager.GetDataTableByPage(dbHelper, out totalRows, tableName, selectField, pageNo, pageSize, conditions, dbParameters, orderBy);
                DataTable dt = DbLogic.GetDataTableByPage(dbHelper, out totalRows, tableName, selectField, pageNo, pageSize, conditions, dbParameters, orderBy);
                StringBuilder jsonString = new StringBuilder();
                if (!string.IsNullOrWhiteSpace(RequestString("openFirst")) && string.Equals("1", RequestString("openFirst"), StringComparison.OrdinalIgnoreCase))
                {
                    jsonString.Append("{\"rows\":" + DataTableHelper.DataTable2Json(dt, true) + ",");
                }
                else
                {
                    jsonString.Append("{\"rows\":" + DataTableHelper.DataTable2Json(dt) + ",");
                }
                jsonString.Append("\"pager.totalRows\":\"" + totalRows + "\",");
                span = DateTime.Now - begin;
                jsonString.Append("\"sort\":\"" + sort + "\",");
                jsonString.Append("\"direction\":\"" + direction + "\",");
                jsonString.Append("\"span\":\"" + span.TotalMilliseconds + "\"");//查询耗时 毫秒数
                jsonString.Append("}");
                Response.Write(jsonString);
                Response.End();
            }
            else
            {
                Response.Write("本页面需要传入outPutMode参数");
                Response.End();
            }
        }

    }

///

分页功能调用代码

        /// <summary>
        /// 吉日嘎拉 获取分页数据(防注入功能的) 
        /// 宋彪  2014-06-25 构造List<KeyValuePair<string, object>>比IDbDataParameter[]方便一些
        /// dbHelper.MakeParameters(dbParameters)--》IDbDataParameter[]
        /// </summary>
        /// <param name="recordCount">记录条数</param>
        /// <param name="dbHelper">dbHelper</param>
        /// <param name="tableName">数据来源表名</param>
        /// <param name="selectField">选择字段</param>
        /// <param name="pageIndex">当前页</param>
        /// <param name="pageSize">每页显示多少条</param>
        /// <param name="conditions">查询条件</param>
        /// <param name="dbParameters">查询参数</param>
        /// <param name="orderBy">排序字段</param>
        /// <returns>数据表</returns>
        public static DataTable GetDataTableByPage(IDbHelper dbHelper, out int recordCount, string tableName, string selectField, int pageIndex, int pageSize, string conditions, List<KeyValuePair<string, object>> dbParameters, string orderBy)
        {
            DataTable result = null;
            recordCount = 0;
            if (null != dbHelper)
            {
                recordCount = DbLogic.GetCount(dbHelper, tableName, conditions, dbHelper.MakeParameters(dbParameters));
                result = DbLogic.GetDataTableByPage(dbHelper, tableName, selectField, pageIndex, pageSize, conditions, dbHelper.MakeParameters(dbParameters), orderBy);
            }
            return result;
        }

 

///

底层分页功能实现,可通过源码查看

        /// <summary>
        /// Oracle 获取分页数据(防注入功能的)兼容多种数据库
        /// </summary>
        /// <param name="dbHelper">数据库连接</param>
        /// <param name="tableName">数据来源表名</param>
        /// <param name="selectField">选择字段</param>
        /// <param name="pageIndex">当前页</param>
        /// <param name="pageSize">每页显示多少条</param>
        /// <param name="conditions">查询条件</param>
        /// <param name="dbParameters">查询参数</param>
        /// <param name="orderBy">排序字段</param>
        /// <returns>数据表</returns>
        public static DataTable GetDataTableByPage(IDbHelper dbHelper, string tableName, string selectField, int pageIndex, int pageSize, string conditions, IDbDataParameter[] dbParameters, string orderBy, string currentIndex = null)
        {
            string sqlStart = ((pageIndex - 1) * pageSize).ToString();
            string sqlEnd = (pageIndex * pageSize).ToString();
            if (currentIndex == null)
            {
                currentIndex = string.Empty;
            }
            if (!string.IsNullOrEmpty(conditions))
            {
                conditions = "WHERE " + conditions;
            }
            string sqlQuery = string.Empty;

            if (dbHelper.CurrentDbType == CurrentDbType.Oracle)
            {
                if (!string.IsNullOrEmpty(orderBy.Trim()))
                {
                    orderBy = " ORDER BY " + orderBy;
                }
                sqlQuery = string.Format("SELECT * FROM(SELECT ROWNUM RN, H.* FROM ((SELECT " + currentIndex +" "+ selectField+" FROM {0} {1} {2} )H)) Z WHERE Z.RN <={3} AND Z.RN >{4}"
    , tableName, conditions, orderBy, sqlEnd, sqlStart);
            }
            else if (dbHelper.CurrentDbType == CurrentDbType.SqlServer)
            {
                sqlQuery = string.Format("SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY {0}) AS RowIndex, " + selectField + " FROM {1} {2}) AS PageTable WHERE RowIndex BETWEEN {3} AND {4}"
                    , orderBy, tableName, conditions, sqlStart, sqlEnd);
            }
            else if (dbHelper.CurrentDbType == CurrentDbType.MySql
                || dbHelper.CurrentDbType == CurrentDbType.SQLite)
            {
                sqlQuery = string.Format("SELECT {0} FROM {1} {2} ORDER BY {3} LIMIT {4}, {5}", selectField, tableName, conditions, orderBy, sqlStart, pageSize);
            }
            
            var dt = new DataTable(tableName);
            if (dbParameters != null && dbParameters.Length > 0)
            {
                dt = dbHelper.Fill(sqlQuery, dbParameters);
            }
            else
            {
                dt = dbHelper.Fill(sqlQuery);
            }
            return dt;
        }

 

这个分页功能可以兼容多种数据库,多表关联查询

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

最好用的兼容多种数据库通用高效的大数据分页功能 的相关文章

  • 在 ASP.NET Core 2.0 Web Api 中返回“原始”json

    AFAIK 在 ASP NET Core Web Api 中返回数据的标准方法是使用IActionResult并提供例如一个OkObject结果 这对于对象来说效果很好 但是如果我以某种方式获得了一个 JSON 字符串 并且我只想将该 JS
  • 将嵌套字典键值转换为 pyspark 数据帧

    我有一个 Pyspark 数据框 如下所示 我想提取 dic 列中的那些嵌套字典并将它们转换为 PySpark 数据帧 像这样 请让我知道如何实现这一目标 Thanks from pyspark sql import functions a
  • 如何舍入、取整、取整、截断

    如何对 jq jq 1 5 1 a5b5cbe 中的数字进行舍入 取整 取整和截断 例如 与 mass 188 72 我想 mass 188 有地板 mass 189 与天花板和圆形 舍入示例 5 52 gt 6 5 50 gt 5 or
  • SQL Server OPENJSON读取嵌套json

    我有一些想要在 SQL Server 2016 中解析的 json 有一个项目 gt 结构 gt 属性的层次结构 我想编写一个解析整个层次结构的查询 但我不想通过索引号指定任何元素 即我不想做这样的事情 openjson json 0 or
  • 从 php 到 JavaScript 的数组

    我正在尝试使用 json 将数组列表从 php 传输到 javascript 但它不起作用 JS ajax url getProfilePhotos php type post post or get method data if you
  • Jackson 将单个项目反序列化到列表中

    我正在尝试使用一项服务 该服务为我提供了一个带有数组字段的实体 id 23233 items name item 1 name item 2 但是 当数组包含单个项目时 将返回该项目本身 而不是包含一个元素的数组 id 43567 item
  • SQL查询json字典数据

    我的表中的 CLOB 字段包含 JSON 如下所示 a value1 b value2 c value3 我正在尝试编写一个 SQL 查询来返回一个包含键和值字段的表 如下所示 key value a value1 b value2 c v
  • 使用 json_encode() 函数在 PHP 数组中生成 JSON 键值对

    我正在尝试以特定语法获取 JSON 输出 这是我的代码 ss array 1 jpg 2 jpg dates array eu gt 59 99 us gt 39 99 array1 array name gt game1 publishe
  • Hive:如何分解嵌入 CSV 文件中的 JSON 列?

    从 CSV 文件 带有标题和管道分隔符 中 我得到了以下两个内容 其中包含一个 JSON 列 内部有一个集合 如下所示 第一种情况 使用没有名称的 JSON 集合 ProductId IngestTime ProductOrders 918
  • 写入 JSON 会产生 TypeError: dump() 需要至少 2 个参数(给定 1 个)

    我正在尝试加载 json 文件 更新它并写回来 这是我的尝试 但出现错误 类型错误 dump 至少需要 2 个参数 给定 1 个 with open employees json as data file employees json lo
  • 如何在 C# 中获取 Json 数组?

    我有一个像这样的 Json 字符串 我想将它加载到 C 数组中 当我尝试这样做时 我收到异常 我的字符串 customerInformation customerId 123 CustomerName Age 39 Gender Male
  • 如何修复 jq 扁平化 JSON 数组的重复输出

    我正在尝试使用 jq 命令压平 JSON 文件 但输出是重复的 请在这里查看我的jqplay https jqplay org s gwvMIH fed https jqplay org s gwvMIH fed 我的输入 JSON cos
  • 在 JSON 数组中按属性查找对象

    我在获取 JSON 数据中的字符串时遇到问题 格式如下 name Alice age 20 id David last 25 id John last 30 有时它会一起改变位置 John从第三名到第二名 name Alice age 20
  • PowerShell JSON 添加值格式

    我正在向 json 文件添加数据 我这样做是通过 blockcvalue connectionString server localdb mssqllocaldb Integrated Security true Database data
  • 从哈希中删除 nil 值

    我希望从哈希中删除具有nil value article是一个存储每篇文章的类 并且attributes方法将文章存储为散列 预期结果 articles results author null title Former bar manage
  • React Native / Laravel - 向 API 发送请求

    我正在实现一个移动应用程序 它使用 Laravel 作为 API 与数据库进行通信 我想将用户名和密码从我的 React Native 应用程序发送到 Laravel 我正在使用以下代码来执行此操作 fetch mysite com api
  • 来自 ajax 的 Bootstrap 表 json

    我有 ajax 和 bootstrap 表的问题 我有一个 ajax JSON 我用这个方法调用 document ready function ajax url php process php method fetchdata dataT
  • Laravel 5.4 将json保存到数据库

    帮我将 json 保存到数据库 表字段类型 文本 我有带有强制转换数组的模型 class Salesteam extends Model protected casts team members gt array 我想要像这样 index
  • 在 Mono 中反序列化 JSON 数据

    使用 Monodroid 时 是否有一种简单的方法可以将简单的 JSON 字符串反序列化为 NET 对象 System Json 只提供序列化 不提供反序列化 我尝试过的各种第三方库都会导致 Mono Monodroid 出现问题 谢谢 f
  • 如何为 json 请求对象指定可选元素

    在 API 蓝图中 我希望为 POST 消息指定一个可选的 json 元素 示例 Add a new User POST To add a User send a JSON Request application json name A n

随机推荐

  • js判断输入框不能为空格或null值

    var sno sno val var sname sname val if sno indexOf gt 0 sno null sname indexOf gt 0 sname null alert 学号和名称不能为空格或null值 re
  • Git安装(Windows)

    一 下载 官网下载页面 https git scm com downloads 我选择的是Win 64位的安装版本 地址 https github com git for windows git releases download v2 3
  • ElasticSearch (五) Postman查询数据

    match all size from size match 返回指定字段 排序 sort range wildcard查询 合并查询语句 1 match all 匹配所有文档 match all 下面为查询结果 result size 例
  • 了解Wi-fi频段概念

    前言 信道带宽 应该了解wi fi频段 这样才能分析有多少信道带宽可用 以及如何在没有任何干扰 失真 的情况下有效地使用它 2 4GHz和5GHz频段可用于wi fi 2 4 GHz Wi Fi频段 在2 4 GHz频段 可用带宽为100
  • QT窗口缩放,自定义边框,无边框缩放拉伸

    目录 什么情况下需要自定义边框 效果图 一 基本思路 二 参考程序一 2 1 源码 2 2 思路说明 2 3 缺点说明 三 参考程序2 3 1 源码 3 2 思路说明 3 3 优缺点说明 四 参考程序3 4 1源码 4 2 思路说明 4 3
  • 无缘

    何时相逢 何时相见 闲暇的日子中 总抱着那一份的想念 昨日的黄昏 急匆匆赶到那约定的地点 道旁的杨树枝繁叶茂 晚风随着鸟鸣声悠扬 我徘徊在你的身旁 你驻足于她的身边 笑语从月牙一般的屋顶上掠过 而我却不屑看上你一眼 能否相逢 能否相见 寂静
  • React完整上手攻略(转)

    转自https typescript bootcss com tutorials react html 这篇快速上手指南会教你如何将TypeScript与React结合起来使用 在最后 你将学到 使用TypeScript和React创建工程
  • JDBC注册多个驱动

    我们可以在静态块中注册多个JDBC驱动 如下同时注册了mysql oracle驱动 try Class forName com mysql jdbc Driver Class forName oracle jdbc driver Oracl
  • ClearCanvas 源码解析 1

    国内 网上关于ClearCanvas开源的文章太少 最近刚好在做PACS 发现这个源码后 调试了一下 运行效果还可以 ClearCanvas是C 开源源码 对PACS的解析操作 底层和C 开源fo dicom有什么关系 还没有时间去研究 看
  • Python嵌套字典的遍历

    对于字典 d 1 1 2 2 3 4 44 5 55 6 7 7 1024 8 88 9 9 1 如何获取到 7 1024 中的1024 2 如何获取到所有key为7的value值 方法一 直接输出 d 1 1 2 2 3 4 44 5 5
  • C/C++面试题

    1 指针和引用的区别 答 引用是在C 中引入的 它们之间的区别有 1 非空区别 指针可以为空 而引用不能为空 2 可修改区别 如果指针不是常指针 那么就可以修改指向 而引用不能 3 初始化区别 指针在定义时可以不用初始化 而引用在定义的同时
  • python调用js文件

    python调用js文件生成参数 JS逆向 安装exejs与nodejs 调用js生成参数 JS逆向 我就随便找了一个网站https cloud kingdee com passport auth login 随手输入一个账号密码 抓包后发
  • 正在配置更新请勿关闭计算机怎么办,电脑开机“显示正在配置更新请勿关闭计算机”该怎么办?...

    电脑开机 显示正在配置更新请勿关闭计算机 该怎么办 以下文字资料是由 历史新知网www lishixinzhi com 小编为大家搜集整理后发布的内容 让我们赶快一起来看一下吧 电脑开机 显示正在配置更新请勿关闭计算机 该怎么办 系统打补丁
  • 法兰轴机械加工工艺及夹具设计(说明书+CAD图纸+工序卡)

    一 零件的分析 1 1零件的作用 题目所给定的零件车床输出轴 见图1 其主要作用 一是传递转矩 使车床主轴获得旋转的动力 二是工作过程中经常承受载荷 三是支撑传动零部件 零件上的 80mm孔与动力源 电动机主轴等 配合起定心作用 用10 2
  • 疫情期间谁干谁赚钱的三个小副业,普通人也能干,基本不用你投资

    一切生意的本质 都是低买高卖 只是有时 这个利差来自货物 有时利差来自服务而已 疫情过后 三个生意千万不要干 谁干谁倒闭 天王老子救不了你 还有三个生意 谁干谁发财 一年赚个三五十万 搞点生活费一点毛病都没有 我先说不能碰的行业啊 第一个服
  • Linux进程信号

    目录 信号入门 信号的本质 信号的处理 产生信号 通过终端按键产生信号 调用系统函数向进程发信号 由软件条件产生信号 硬件异常产生信号 阻塞信号 信号其他相关常见概念 信号在内核中的表示 sigset t 信号集操作函数 sigprocma
  • sudo rosdep init 遇到Website may be down问题以及解决方案

    sudo rosdep init 遇到Website may be down问题以及解决方案 1 在终端中输入sudo gedit etc hosts 2 文末添加199 232 28 133 raw githubusercontent c
  • 华为OD机试真题-去除多余空格【2023.Q1】

    题目内容 去除文本多余空格 但不去除配对单引号之间的多余空格 给出关键词的起始和结束下标 去除多余空格后刷新关键词的起始和结束下标 输入描述 输入为两行字符串 第一行 待去除多余空格的文本 用例保证如果有单引号 则单引号成对出现 且单引号可
  • PPTP/L2TP协议详解以及应用部署

    PPTP L2TP协议讲述以及应用部署 一 基本概念 PPTP PPTP是对端对端协议 PPP 的一种扩展 它采用了PPP所提供的身份验证 压缩与加密机制 PPTP能够随TCP IP协议一道自动进行安装 PPTP与Microsoft端对端加
  • 最好用的兼容多种数据库通用高效的大数据分页功能

    通用权限管理系统底层有一个通用分页查询功能 该功能可实现多种数据库的查询 支持多表关联分页查询 目前是最完善的分页功能实现 下面代码是使用的方法截图 后台代码截图1 后台代码截图2 后台代码截图3 后台代码截图4 后台代码截图5 页面后台代