http://blog.joycode.com/liuhuimiao/

在.NET 2.0 PDC或Beta1中,可以看到SqlCommand对象新增了个ExecutePageReader方法,该方法实现了分页读取数据的功能。对于分页读取数据,在ADO.NET1.1中(当然2.0也适合)一般常用动态构造SQL语句实现:

SqlDataReader GetPage(int pageNumber, int pageSize)
    {
        //pageNumber: 从 0 开始计数的页码
        //pageSize: 每页的记录数
        String command = String.Format("SELECT * FROM (SELECT TOP {0} * FROM " +
           "Products ORDER BY ProductID) AS t1 WHERE ProductID NOT IN " +
           "(SELECT TOP {1} ProductID FROM Products ORDER BY ProductID) ",
           pageSize * (pageNumber + 1), pageSize * pageNumber);

SqlConnection conn = new SqlConnection("server=.;database=Northwind;Trusted_Connection=yes");
        SqlCommand cmd = new SqlCommand(command, conn);
        conn.Open();
        SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
        return dr;
    }

有时为更好实现分页性能效果,也可以采用存储过程建立临时表的方式进行数据分页,但原理基本都差不多。在ADO.NET 2.0 PDC/Beta1中,用SqlCommand.ExecutePageReader进行数据分页:

SqlDataReader GetPageReader(int pageNumber, int pageSize)
    {
        int startIndex = (pageNumber - 1) * pageSize;
        String command = "SELECT * FROM Products";
        SqlConnection conn = new SqlConnection("server=.;database=Northwind;Trusted_Connection=yes");
        SqlCommand cmd = new SqlCommand(command, conn);
        conn.Open();
        SqlDataReader dr = cmd.ExecutePageReader(CommandBehavior.CloseConnection, startIndex, pageSize);

return dr;
    }

最后绑定第2页的5行数据(ProductID从6到10)到GridView1上:

GridView1.DataSource = GetPage(1, 5);
        GridView1.DataBind();

从上可以看到,用了ExecutePageReader确实简单了很多。但是,很“不幸”告诉大家,ExecutePageReader在未来版本中将不会出现,也就是说被cut掉了。至于cut的真正原因,还真不知道。不过,我试图用Reflector去看其内部,发现这样一个调用顺序:ExecutePageReader()—》SqlResultSet.CompleteOpenForPageReader()—》SqlResultSet.FetchInternal()—》执行存储过程sp_cursorfetch,也就是实际ExecutePageReader使用了SQLServer的服务器游标进行数据分页读取,但这跟它被cut是否有关?这么好用的一个功能被cut是不是有其他考虑?或许ADO.NET开发小组在鱼和熊掌取舍之间已经做了抉择,只是我还是觉得ExecutePageReader(据说SqlResultSet也被cut,然后连同ExecutePageReader被cut)被cut很可惜。

ADO.NET 2.0中的SqlCommand.ExecutePageReader相关推荐

  1. ADO.NET 2.0 中的架构

    Bob Beauchemin DevelopMentor 适用于: Microsoft ADO.NET 2.0 Microsoft Visual Studio 2005 C# 编程语言 摘要:了解在 ...

  2. ADO.NET 2.0 中的新增 DataSet 功能

    发布日期: 1/13/2005 | 更新日期: 1/13/2005 Jackie Goldstein Renaissance Computer Systems 适用于: Microsoft ADO.N ...

  3. NET Framework 2.0中的数据访问新特性

    1异步数据访问 a)支持异步数据编程 b)SqlConnection – BeginOpen – EndOpen  c)SqlCommand – BeginExecuteNonQuery – Begi ...

  4. 在代码中使用SqlCommand对象

    在代码中使用SqlCommand对象 (2009-09-21 11:16:10) 转载   分类:.Net编程类 1.1  创建SqlCommand对象 可以通过三种方式创建SqlCommand对象. ...

  5. ADO.NET 2.0 功能一览 --作者:Bob Beauchemin

    [导读]ADO.NET 2.0包含一个新的基类提供程序模型,适用于所有提供程序的功能以及对System.Data.SqlClient进行的更改.通过本文,您可以获得有关这些新功能的概述.它们的用法示例 ...

  6. ADO.NET 2.0 功能一览

    ADO.NET 2.0 功能一览 作者:Bob Beauchemin(DevelopMentor) 相关技术:ADO.NET 2.0.SQL Server 2005 难度:★★★☆☆ 读者类型:.NE ...

  7. 在.net 2.0 中执行分布式事务:隐式事务篇(SQL Server 与 Oracle)

    项目涉及到多个数据库的查询更新操作,也就必然需要分布式事务的支持,查了MSDN知道 .net 2.0 中利用新增的 System.Transactions 命名空间可以简单的实现分布式事务: Syst ...

  8. asp.net 2.0中一次性更新所有GRIDVIEW的记录

    在asp.net 2.0中,gridview控件是十分不错的控件.有的时候,可能一个GRIDVIEW控件中 的各行都是文本框,如何一次性更新所有修改过的记录呢?有两种方法,一种是使用sqldataso ...

  9. 2.0中获取数据库连接统计数据

    作者: http://blog.joycode.com/liuhuimiao/ .NET 2.0中的SqlConnection多了一个StatisticsEnabled属性和ResetStatisti ...

最新文章

  1. [pcl::VoxelGrid::applyFilter] Leaf size is too small for the input dataset. Integer indices would ov
  2. 美国正式宣告将在月球建立永久存在基地
  3. css 边缘闪光_css文字渐变+内发光+投影效果
  4. Sumline常用快捷操作
  5. Windows socket c++ TCP UDP 简单客户端 vs2013
  6. Spring-使用加密的属性文件02
  7. 二进制转换为八进制-栈方式实现
  8. 关闭系统进程,以及如何调用cmd并执行命令
  9. 【OpenCV 例程200篇】44. 图像的灰度变换(伽马变换)
  10. 图说可视化,报表也能做得如此酷炫!
  11. http和websocket共用同一端口
  12. 矩池云上nvidia opencl安装及测试教程
  13. 中医为什么会发明比血管更玄乎的经脉呢
  14. python用matplotlib画皮卡丘_python使用matplotlib绘图 -- barChart
  15. android studio和IDE如何自定义module路径
  16. 快手视频如何一键批量下载
  17. Science fiction list
  18. 科技云报道:新基建已到来,网络安全建设跟上了吗?
  19. 秋冬季健康生活小常识
  20. java.util工具类之Currency类

热门文章

  1. linux 脚本 符号,Shell脚本 入门 —— 符号篇
  2. 图像识别-opencv
  3. C:模块化程序设计 以及数组
  4. YOLOV5的多主干网络backbone实现(Mobilenetv3Small、EagleEye、EfficientNetLite-0、PP-LCNet-1x、SwinTrans-YOLOv5等)
  5. Linux那些事儿 之 戏说USB(22)设备的生命线(五)
  6. 【神经网络】(11) 轻量化网络MobileNetV1代码复现、解析,附Tensorflow完整代码
  7. 深度学习——训练时碰到的超参数
  8. 如何学习streamdecoder类_如何学习篇5:强化2种能力——2种学习模式之运动类:隐性学习...
  9. 基于Keras的CNN/Densenet实现分类
  10. Ubuntu 14.04 64bit上安装有道词典Linux版本