ADO.NET 2.0中的SqlCommand.ExecutePageReader
来源:互联网 发布:gta4commandline优化 编辑:程序博客网 时间:2024/06/06 04:29
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
- ADO.NET 2.0中的SqlCommand.ExecutePageReader
- ADO.NET SqlCommand功能
- ADO.NET之sqlCommand对象
- 【ADO.NET】数据库查询SQLCommand方法汇总
- 【Ado.Net】using用法和SqlCommand认识
- ADO.NET学习之SqlConnection,SqlCommand
- 什么是sqlcommand,或者什么是ado。net的command
- 什么是sqlcommand,或者什么是ado。net的command
- SqlTransaction、SqlConnection和SqlCommand对象实现ADO.NET事务处理
- 黑马程序员之ADO.NET学习笔记:SqlCommand(命令对象)
- ADO.NET 主要的三个对象(SqlConnection/SqlCommand/SqlDataReader)
- ADO.NET 2.0 中的架构
- ADO.NET 2.0 中的架构
- ADO.NET 2.0 中的架构
- ADO.NET 2.0 中的架构
- ADO.NET 2.0 中的架构
- ADO.NET基础01(ADO.NET组成,数据库的方式,SqlCommand,SqlDataReader)
- A brief review on PC/XT/AT/ATX
- 在Form域中Post大于100K的数据
- 工作流常用网站
- this的用法
- [原创] 如何在企业应用中使用嵌入式工作流引擎-1
- ADO.NET 2.0中的SqlCommand.ExecutePageReader
- 2.0中获取数据库连接统计数据
- 算法之贪婪算法
- ASP.NET 2.0页面框架的几处变化
- 丢弃的日子(转载)
- 用Delphi实现在线机器查询
- 改变表已添加约束、外键
- 获取远程网卡MAC地址
- HashCode重载不当造成内存泄漏