ADO.NET是一组用于和数据源进行交互的面向对象类库。通常情况下,数据源是数据库,但它同样也能够是文本文件、Excel表格或者XML文件。ADO.NET允许和不同类型的数据源以及数据库进行交互。然而并没有与此相关的一系列类来完成这样的工作。因为不同的数据源采用不同的协议,所以对于不同的数据源必须采用相应的协议。一些老式的数据源使用ODBC协议,许多新的数据源使用OLEDB协议,并且现在还不断出现更多的数据源,这些数据源都可以通过.NET的ADO.NET类库来进行连接。
ADO.NET2.0提供了两个用于检索关系数据的对象:DataSet和DataReader。并且这两个对象都可以将检索的关系数据存储在内存中。
二者的区别:
1,与数据库连接
DatSet 连接数据库时是非面向连接的。把表全部读到Sql中的缓冲池,并断开于数据库的连接。
DataReader 连接数据库时是面向连接的。读表时,只能向前读取,读完数据后有用户决定是否断开连接。
2,处理数据速度
DataSet读取、处理速度较慢。
DataReader读取、处理速度较快。
3,更新数据库
在对DataSet数据集中的数据进行更新后,可以把数据更新回原来的数据库。
在对DataReader中的数据进行更新后,没有办法进行数据库更新。
4,支持分页排序
在DataSet中支持分页、动态排序等操作。
在DataReader中没有分页、动态排序的功能。
5,占用内存
DataSet在 IIS 服务器上所使用的内存较多。
DataReader在 IIS 服务器上所使用的内存较少。
应用:
使用DataSet是为了实现应用程序的下述功能:
1 操作结果中的多个分离的表。 2 操作来自多个源(例如来自多个数据库、XML文件和电子表格的混合数据)的数据。 3 在层之间交换数据或使用XML Web服务。与DataReader 不同,DataSet能被传递到远程客户端。 4 通过缓冲重复使用相同的行集合以提高性能(例如排序、搜索或过滤数据)。 5 每行执行大量的处理。在使用DataReader返回的行上进行扩展处理将使连接存在的时间比必要的更长,从而降低效率。 6 使用XML操作(例如XSLT转换和Xpath查询)维护数据。
在应用程序需要以下功能时使用DataReader:
1 不需要缓冲数据。 2 正在处理的结果集太大而不能全部放入内存中。 3 需要迅速一次性访问数据,采用只向前的只读的方式
综上所述得出DataSet和DataReader有各自适用的场合。如果数据来源控件只是用来填入控件的清单成为其选项,或者数据绑定控件并不需要提供排序或分页功能的话,则应该使用 DataReader。反之,如果数据绑定控件需要提供排序或分页功能的话,则必须使用 DataSet,通过DataSet设置出来分页排序等页面面显示效果。