[C#学习] DataAdapter.Fill()分页

查询结果分页是以较小数据子集(即页)的形式返回查询结果的过程。 它通常用于以易于管理的小块形式向用户显示结果。

DataAdapter 提供了通过 Fill 方法的重载来仅返回一页数据的功能。 但是,对于大量的查询结果,它可能并不是首选的分页方法,因为 DataAdapter 虽然仅使用所请求的记录来填充目标 DataTable 或 DataSet,但仍会使用返回整个查询的资源。 若要在从数据源中返回一页数据时不使用返回整个查询的资源,请为查询指定附加条件,使返回的行数减少到只返回所需的行。

若要使用 Fill 方法返回一页数据,请指定 startRecord 参数(代表该数据页中的第一个记录),并指定 maxRecords 参数(代表该数据页中的记录数)。

以下代码示例显示如何使用 Fill 方法来返回查询结果(页大小为 5 个记录)的第一页。

int currentIndex = 0;

int pageSize = 5;

string orderSQL = ”SELECT * FROM Orders ORDER BY OrderID”;
// Assumes that connection is a valid SqlConnection object.
SqlDataAdapter adapter = new SqlDataAdapter(orderSQL, connection);

DataSet dataSet = new DataSet();
adapter.Fill(dataSet, currentIndex, pageSize, ”Orders”);

在上例中,DataSet 只填充了 5 个记录,但却返回了整个 Orders 表。 若要用相同的 5 个记录填充 DataSet 但仅返回这 5 个记录,请在 SQL 语句中使用 TOP 和 WHERE 子句,如以下代码示例所示。

int pageSize = 5;

string orderSQL = ”SELECT TOP ” + pageSize +
“ * FROM Orders ORDER BY OrderID”;
SqlDataAdapter adapter = new SqlDataAdapter(orderSQL, connection);

DataSet dataSet = new DataSet();
adapter.Fill(dataSet, ”Orders”);

请注意,当以这种方式进行查询结果分页时,必须保留用于对行进行排序的唯一标识符,以便将唯一 ID 传递给用于返回下一页记录的命令,如以下代码示例所示。

string lastRecord =

dataSet.Tables["Orders"].Rows[pageSize - 1]["OrderID"].ToString();

若要使用接受 startRecord 和 maxRecords 参数的 Fill 方法的重载来返回下一页记录,请使当前记录索引按页大小递增,并填充该表。 请记住,即使仅在 DataSet 中添加一页记录,数据库服务器仍会返回全部查询结果。 在以下代码示例中,先清除表行,然后再用下一页数据填充这些表行。 您可能需要在本地缓存中保留一定数量的返回行,以减少与数据库服务器的往返次数。

currentIndex += pageSize;

dataSet.Tables["Orders"].Rows.Clear();

adapter.Fill(dataSet, currentIndex, pageSize, ”Orders”);

若要返回下一页记录而不让数据库服务器返回整个查询,请指定对 SQL SELECT 语句的限制条件。 由于上例保留了返回的最后一个记录,因此可以在 WHERE 子句中使用它来指定查询的起点,如以下代码示例所示。

orderSQL = ”SELECT TOP ” + pageSize +

“ * FROM Orders WHERE OrderID > ” + lastRecord + ” ORDER BY OrderID”;
adapter.SelectCommand.CommandText = orderSQL;

dataSet.Tables["Orders"].Rows.Clear();

adapter.Fill(dataSet, ”Orders”);

转载于:https://www.cnblogs.com/AngryZe/p/8280376.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/539631.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java流读取字符串_javaIO之字符流是怎么读取的?

最近在看io相关的知识,遇到一些小问题,以下有例子来说明问题:比如:12345 是一个十进制数根据ASCII码找到是 :二进制 00110001 00110010 00110011 00110100 00110101十进制4950515253十六进制 0x310x320x330x340x35文件…

什么是mybatis,mybatis有什么特点

jdbc开发优缺点:http://blog.csdn.net/zengmingen/article/details/51180796 hibernate开发优缺点:http://blog.csdn.net/zengmingen/article/details/51180805 1)基于上述二种支持,我们需要在中间找到一个平衡点呢?结…

简易RPC框架实现

写在最前面 PRC(Remote Procedure Call) 远程过程调用。通俗的讲就是程序通过RPC框架调用远程主机的方法就如同调用本地方法一样。Dubbo就是这样一个Rpc框架,本文主要参考Dubbo的设计思路,简易实现了Rpc框架。 本文涉及到知识点包括: Jdk 动态…

kafka java获取topic_通过编程方式获取Kafka中Topic的Metadata信息

如果我们需要通过编程的方式来获取到TopicMetadataRequest请求到 def findLeader(topic: String): Unit {val consumer connect("www.iteblog.com", 9092)val req TopicMetadataRequest(TopicMetadataRequest.CurrentVersion,0, kafkaGroupId, List(topic))val to…

redis java 遍历key_java遍历读取整个redis数据库实例

redis提供了灵活的数据查询方式,最牛的就是key的搜索支持正则表达式。jedis.keys(“*”);表示搜索所有keyjedis.keys(“abc*”)表示搜索开头为abc的key数据遍历了key就能遍历到value。其实就是一个setRedisDO rd new RedisDO();rd.open();Set s rd.jedis.keys(&qu…

js学习

为什么80%的码农都做不了架构师?>>> /* my code */ var gArrSpell [ 1111, 2222, 3333, 4444, 5555, 6666, 7777, 8888, 999999, AAAA, bbbb, cccc, dddd, eeee, fffff ];var gArrSplDmg [11,12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24…

代码在eclipse下不报错,在doc命令行下报错--jar file和runable jar file

今天开发一个小工具,引用了Log4j,来记录日志,在eclipse下运行,代码正常,打包成jar放到doc命令行下运行报错: Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/logging/…

gradle java ide_使用Gradle构建Java项目

使用Gradle构建Java项目这个手册将通过一个简单的Java项目向大家介绍如何使用Gradle构建Java项目。我们将要做什么?我们将在这篇文档航中创建一个简单的Java项目,然后使用Gradle构建它。需要准备什么?预留15分钟空闲时间一件称手的兵器(你最喜…

小马激活软件下载,当心伪小马,有病毒

官方的小马激活软件已经停止更新了,下文是官方停更公告。 http://www.pccppc.com/xiaomajihuo-html 所以小马oem7以后的都不是官方的,包含病毒。重装系统后,一般是先激活系统,再安装杀毒软件,这就给“伪小马激活工具”…

truncate,delete,drop之间的区别

TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。 但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。 DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。 TRUNCATE…

三张图搞懂JavaScript的原型对象与原型链

对于新人来说,JavaScript的原型是一个很让人头疼的事情,一来prototype容易与__proto__混淆,二来它们之间的各种指向实在有些复杂,其实市面上已经有非常多的文章在尝试说清楚,有一张所谓很经典的图,上面画了…

python partial_如何在python多处理模块中使用partial函数?

下面是我如何解决这个问题的一个简单例子from functools import partialfrom multiprocessing import Pooldef VariadicLifter(func, args):return func(*args)def func(x,y,z,a):return x2*y3*z4*aif __name__ __main__:func_ partial( func, 500, 1007)lfunc_ partial( Va…

Mybatis中resultMap

MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接 表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟resultMap不能同时存在。 1.resultType …

超简单的mysql多实例布置

一、基本概念mysql下载:http://mirrors.sohu.com/mysql/MySQL-5.5/1、MySQL多实例就是在一台机器上面开启多个不同的端口,运行多个MySQL服务进程。这些MySQL多实例公用一套安装程序,使用不同的(也可以是相同的)配置文件,启动程序&…

java程序设计计算器_Java程序设计计算器(含代码)

Java程序课程设计任务书实用性计算器的设计与开发1、主要内容:开发一个实用型的计算器程序,实现基本的计算功能同时并进行相应的功能拓展,使其具更加人性化的功能。我们可以用其进行相应的计算功能来方便我们的学习,代替我们进行一…

mybatis配置insert/update/delete同一个模板

insert,update,delete标签只是一个模板,在操作时是以sql语句为核心的, 即在做增/删/改时,insert/update/delete便签可以通用, 但做查询时只能用 select 标签 提倡什么操作就用什么标签 这就是为什么 ex…

Mybatis配置文件resultMap映射啥时候可写可不写?

1、student实体类 public class Student {private Integer id;//编号private String name;//姓名private Double sal;//薪水public Student(){}public Student(Integer id, String name, Double sal) {this.id id;this.name name;this.sal sal;}public Integer getId() {ret…

arithmetic java_Java:Arithmetic

好吧,事实上你有方法设置变量叫get - 这显然不是一个好主意,并且没有缩进......但它应该有效。但是,你还没有展示出你是如何使用它的。也许你实际上并没有被称为setter方法?以下是相同代码但具有不同名称的示例,以及使…

网络框架 Retrofit(三)

简单实现Retrofit(替代Okhttp) 1.定义注解参数 Documented Target(PARAMETER) Retention(RUNTIME) public interface Field {String value(); } 复制代码Documented Target(METHOD) Retention(RUNTIME) public interface Get {String value() default &q…

Tomcat提示“XDB 的服务器 localhost 要求用户名和密码”

在地址栏输入http://localhost:8080/(8080是TOMCAT的端口号)测试,系统提示“XDB 的服务器 localhost 要求用户名和密码”,并弹出输入用户、密码的窗口,查看代码没问题,不解,上网上查资料,是因为…