John Papa的一篇文章《DataSet and DataTable in ADO.NET 2.0》,详细介绍了ADO.Net 2.0的一些新功能和特性,对于利用ADO.NET开发的程序员来说,是值得关注的。现介绍如下:
一、功能增强的DataTable
在ADO.NET1.x中,DataSet完全掩盖了DataTable的光芒,并非DataTable自身功能不够强大,实则是比较DataSet而言,很多功能在1.x版本中受到了限制。例如Merge功能,在ADO.NET1.x版本中,如果要合并两个表,只有是通过DataSet的Merge方法,才能完成,代码如下:
string sqlAllCustomers = "SELECT * FROM Customers";
string cnStr = @"Data Source=.;Initial Catalog=northwind;Integrated Security=True";
|
在ADO.NET 2.0中,对DataTable作了改进,同样提供了Merge方法。因此如上的代码中,如果要合并表dtCust1和dtCust2,就不必再引入DataSet对象了:
dtCust1.Merge(dtCust2); |
此外,ADO.NET1.x版本中,DataTable也无法完成Xml文件和数据表之间的转换。这个问题在2.0版本中,也得到了改进,DataTable也具备了和DataSet对象同样的操作xml文件的能力,包括方法ReadXml,WriteXml等。
DataSet和DataTable在2.0版本中,还提供了一个新的属性RemotingFormat.在对DataTable和DataSet对象进行序列化时,该属性标示序列化的格式是二进制还是xml.
二、轻量级对象和快速遍历
ADO.NET 2.0中的DataTable提供了CreateDataReader方法(在之前的版本名为GetDataReader),该方法将创建一个DataTableReader对象。DataTableReader与DataTable不同,它是一个轻量级的对象,其支持Disconnected,这一点与DataReader(SqlDataReader)不同。这些特点决定遍历DataTableReader对象将更加快速,占用的数据资源更少(Disconnected)。下面的代码创建了一个DataTableReader对象,并将其绑定到DataGridView控件上:
using (SqlConnection cn = new SqlConnection(cnStr)) |
和DataReader一样,DataTableReader对象只能向前遍历,可以通过Read方法,定位到对象的第一行。如果DataTableReader如果是被一个包含有多个数据表的DataSet对象创建,DataTableReader也会包含多个结果集。通过调用NextResult方法,访问结果集序列。
|
DataTableReader对象中数据表的顺序与DataSet中的数据表顺序一致。如果你需要制定特定的顺序,可以通过重载CreateDataReader方法来实现。
三、装载数据
可以通过DataTableReader对象生成DataTable和DataSet.利用DataTable和DataSet在2.0版本中新引入的方法Load,可以传递DataTableReader或者任何实现IDataReader接口的类对象。下面的代码就是通过Load方法将dt1的数据传递到新的数据表dt2中:
DataTableReader dtRdr = dt1.CreateDataReader(); |
在使用Load方法装载多行数据时,可以先调用BeginLoadData方法来避免通知(notifications),索引维护(index maintenance)以及约束检查(constraint checking),然后再通过EndLoadData方法返回数据。
四、性能改进
这恐怕是ADO.NET 2.0最激动人心的改进。在1.x版本中,随着数据的增大,在使用DataTable和DataSet对象时,性能是不能令人满意的。ADO.NET 2.0对索引引擎作了很大的改进,使得2.0的数据访问能力获得极大的提高。以下面的测试代码为例:
|
TimeSpan elapsedTime = DateTime.Now - startTime;
MessageBox.Show(dt.Rows.Count.ToString() + " rows loaded in " + elapsedTime.TotalSeconds + " seconds.");
分别在Visual Studio.NET 2003和Visual Studio 2005环境下运行,结果比较如下:
|
Iterations |
ADO.NET 1.1 |
ADO.NET 2.0 |
|
10,000 |
0.20 |
0.20 |
|
100,000 |
7.91 |
3.89 |
|
1,000,000 |
1831.01 |
23.78 |
【相关文章】
|
|||
| · 深入了解PGP加密技术 · Linux 集群技术专题 · Ubuntu 中文开源频道 · 木马原理与防范 · Sniffer安全技术从入门.. · 负载均衡技术基础专题 · U盘病毒从认识到防范 · 电信运营商封堵非法ADS.. |
· AIX操作系统管理应用(.. · TCP/IP协议专题 · 华为、贝恩资本22亿美.. · 加密与解密技术 · Windows Server 2008 .. · CISSP认证成长之路 · 802.11n:下一代的无线.. · 如何优化IT 控制能耗 |
||
|
|||
| · 三层交换技术专题 · SQL Server入门到精通 · 刀片服务器基础 · Windows远程桌面应用 · 深入了解PGP加密技术 · Solaris 10 配置管理 · Cisco IOS · 路由器设置与口令恢复 |
· Linux 集群技术专题 · 木马原理与防范 · Exchange Server专题 · FreeBSD使用教程 · Sniffer安全技术从入门.. · 多核服务器技术 · 常用交换机典型配置 · TCP/IP协议专题 |
||
|
|||
| · 刀片服务器基础 · 三层交换技术专题 · Windows远程桌面应用 · RAID——磁盘阵列基础 · 邮件服务器专题 · Sniffer安全技术从入门.. · 常用交换机典型配置 · Linux 集群技术专题 |
· 路由器设置与口令恢复 · 多核服务器技术 · 网络钓鱼 · Exchange Server专题 · Windows发展史 · 木马原理与防范 · 软件插件 · MySQL基础与配置 |
||
| ·DB2 Viper快速入门 ·DB2 9数据库的镜像分割与.. |
·将XML应用程序从DB2 8.x.. ·DB2 9中的pureXML:如何.. |
| ·ASP.NET 2.0 Web Part编.. ·ASP.NET 2.0 Web Part编.. |
·ASP.NET 2.0 Web Part编.. ·ASP.NET 2.0服务器控件之.. |
| ·解读三种虚拟化之路连载.. ·解读三种虚拟化之路连载.. |
·Oracle在VMware上完美运.. ·博主应邀参加YOCSEF虚拟.. |
| ·Awstats处理多apache日志 ·Solaris 10源码安装编译.. |
·GNU源码安装借用YUM排除.. ·特产莱阳梨靓照爆光 |
| · 电信运营商封堵非法ADSL.. · 年初17大热门技术 年底.. · 计算机网络维护入门 |
· 黑客老鸟讲入侵攻击:怎.. · 怎样测试IPS:思博伦Thr.. · U盘病毒从认识到防范 |
| · 测试开发人员参考手册 · BEA会被甲骨文成功收购.. · 程序员如何成长? |
· 年初17大热门技术 年底.. · 解析Ajax开发框架 走进A.. · 基于Google Maps与Ajax.. |
| · 微软在欧盟反垄断中输掉.. · 热门 IT 培训认证官方资.. · Ubuntu 中文开源频道 |
· AMD证实巴塞罗那存有缺.. · IBM System p技术总监谈.. · 年初17大热门技术 年底.. |
| · 甲骨文Oracle 11g正式发.. · Oracle数据库开发之PL/S.. · Oracle数据库开发基础教.. |
· 希捷承认部分硬盘暗藏病.. · 硬盘之父获得诺贝尔物理.. · 存储2006,一个并购的大.. |