A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xiaobai198611 黑马帝   /  2011-11-3 11:14  /  3550 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 xiaobai198611 于 2011-11-3 11:42 编辑

DataReader和DataAdapter/DataSet可以对数据库进行访问和修改,那什么时候用哪一个类比较适合?还有就是使用DataAdapter对象时,能根据需要自动打开和关闭连接怎么理解这一句话!

7 个回复

倒序浏览
本帖最后由 周大俊 于 2011-11-3 11:37 编辑

主要是DataReader和DataSet的比较,DataAdapter是配合Dataset使用的。
     DataReader:每次读取一行,
       .不需要缓冲数据。
  ·正在处理的结果集太大而不能全部放入内存中。
  ·需要迅速一次性访问数据,采用只向前的只读的方式
    DataSet:一次从数据库中全部读取
        .操作来自多个源(例如来自多个数据库、XML文件和电子表格的混合数据)的数据。
  ·在层之间交换数据或使用XM·Web服务。与DataReader 不同,DataSet能被传递到远程客户端。
  ·通过缓冲重复使用相同的行集合以提高性能(例如排序、搜索或过滤数据)。
  ·每行执行大量的处理。在使用DataReader返回的行上进行扩展处理将使连接存在的时间比必要的更长,从而降低效率。
回复 使用道具 举报
DataReader是对数据进行读取操作,且是只读只进的运行机制,在数据读取方面效率高,但会对数据库进行独占式连接,独占的时候被人无法对数据库进行修改,当DataReader没有循环完的时候它会一直独占数据库。
DataSet是个内存数据库,它与其它两个是根本不一样的。
SqlDataAdapter是个数据适配器,工作于DataSet和数据库之间,负责将数据从数据源读出来放在DataSet中,或将DataSet中的更改更新回数据库。
回复 使用道具 举报
DataReader是在线访问,只能读不能改,速度快,需要通过SqlConnection进行打开数据库才能访问,最后养老,DATASET是一种离线的方式,可以修改,不需要通过Sqlconnection进行打开,也可以访问,通过DATAAdapter建立桥梁,然后同步到数据库
回复 使用道具 举报
DataReader 一次读一行 例如你验证登陆的时候就可以用 DataReader  来具体实现  DataAdapter用来填充数据集DataSet 例如你要  查询一组数据  就用这个 配合DataGridView更好的展示.
回复 使用道具 举报
本帖最后由 xiaobai198611 于 2011-11-3 11:45 编辑

还有就是使用DataAdapter对象时,能根据需要自动打开和关闭连接怎么理解这一句话!是不是不需要手动去释放dataset对象呢?相对于目前服务器而言这样消耗资源是不是可以忽略不计
回复 使用道具 举报
周大俊 黑马帝 2011-11-3 11:44:28
7#
当调用SqlDataAdapter对象的Fill()方法时,SqlDataAdapter对象会自动创建并打开该数据库连接。从数据库中取得所需数据后,Fill()方法将自动地关闭数据库连接。这里不需要使用try... catch语句来保护对Fill()方法的调用。因为在该方法内部,SqlDataAdapter对象已使用了try...catch语句来确保其连接会被关闭。
回复 使用道具 举报
陈涛 黑马帝 2011-11-3 11:55:13
8#
DataReader与DataSet最大的区别在于,DataReader使用时始终占用SqlConnection,在线操作数据库.任何对SqlConnection的操作都会引发DataReader的异常.因为DataReader每次只在内存中加载一条数据.所以占用的内存很小.
而DataSet则是将数据一次性加载到内存中.抛弃数据库连接,读取完毕即放弃数据库连接,所以比较耗内存,但是确实比DataReader要灵活.
可以动态的添加行,列,数据,对数据库进行回传更新操作.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马