C#通用分页查询:SQLSERVER与ORACLE
需积分: 50 9 浏览量
更新于2024-09-13
1
收藏 1KB TXT 举报
"C#分页获取数据方法,适用于SQLSERVER和ORACLE数据库,通过Repository类实现,提供分页查询和排序功能。"
在C#编程中,处理大数据集时,通常需要实现分页功能来提高应用程序的性能和用户体验。本方法提供了一种通用的方式,可以在SQLSERVER和ORACLE数据库中实现分页查询。以下将详细解释这个方法的工作原理和关键知识点:
1. **分页查询基础**:分页查询是通过限制返回的数据量,只返回用户当前浏览页面所需的数据,而不是一次性加载所有记录。这减少了网络传输的数据量,提高了页面加载速度。
2. **SQL语句构建**:
- `sql`参数:这是用户提供的基础查询SQL,用于获取所有未分页的数据。
- `sqlTotal`:计算总记录数的SQL,通过对原SQL加上`COUNT(1)`来获取行数,用于确定总页数。
3. **Row_Number()函数**:在SQLSERVER和ORACLE中,使用`ROW_NUMBER()`窗口函数为每行分配一个唯一的行号,基于`orderExpression`参数指定的排序条件。这允许我们根据页码选择特定范围的行。
4. **Partition By 1**:在计算总记录数时,使用`COUNT(1) OVER (PARTITION BY 1)`,这里的`1`代表没有分区,意味着对整个查询结果集进行计数。
5. **StartRowIndex 和 EndRowIndex**:根据当前页索引和每页大小计算出开始和结束的行号,用于限制返回的数据范围。
6. **外层SELECT语句**:构建的SQL包含两个部分,一是用`ROW_NUMBER()`生成行号,二是根据行号筛选出当前页的数据。外层的`SELECT T.* FROM`确保返回的结果与原始SQL查询结构一致。
7. **Repository类**:这个方法依赖于一个自定义的`Repository`类,该类负责执行SQL查询并返回结果。这可能是封装了ADO.NET或者ORM框架(如Entity Framework)的数据库访问层。
8. **参数传递**:
- `pageSize`:定义每页显示的记录数,默认值为20。
- `currentPageIndex`:当前页的索引,从1开始计数。
- `orderExpression`:排序表达式,如`ORGANISEID asc, USERNAME desc`,表示按组织ID升序,用户名降序排列。
- `recordCount`:方法的输出参数,返回查询的总记录数。
9. **返回值**:`DataTable`对象,包含了分页查询后的结果集。如果数据量过大,也可以考虑使用其他数据结构,如`List<T>`或自定义的强类型对象集合,以提高效率和代码可读性。
这个C#方法提供了一个通用的分页查询实现,结合了数据库的特性,通过SQL动态构建分页查询语句,并返回分页后的数据。开发者可以根据自己的需求,将`Repository`类替换为实际的数据库访问逻辑。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2010-02-02 上传
2012-11-05 上传
2010-11-04 上传
131 浏览量
2009-06-10 上传
2012-10-01 上传
Tony_Tony
- 粉丝: 6
- 资源: 10
最新资源
- MyBib: Free Citation Generator-crx插件
- 世界语:已弃用:一种将ES6模块转换为AMD和CommonJS的简便方法
- PyPI 官网下载 | templ8-1.1.1.tar.gz
- jiaozhi.zip_VHDL/FPGA/Verilog_Others_
- udemyPetrachenko
- AndroidVSCode:带有Termux上代码服务器的Android上的Visual Studio Code
- iScroll2-开源
- 爱心公益儿童html5网站模板
- 参考资料-中国书法史话.zip
- SW-CD-HMI-V0.9.rar_Windows_CE_Visual_C++_
- tkdn_vault_site
- dispatch-action:GitHub行动免费部署合并给利益相关者的电子邮件
- wp-dbmanager:允许您优化数据库,修复数据库,备份数据库,还原数据库,删除备份数据库,空表和运行选定的查询。 支持自动计划备份,优化和修复数据库
- sigil.github.io:印记
- repeat-aware:脚手架工具的重复感知性能评估
- hamburgerMenu:Html Css ve Javascript ile Hamburger Menuyapımı