因为她在学校做的项目全都是DataReader,
而我用的全是dataSet,然后和她在网上查有一个人说dataReader比dataSet快(我当时真恨死这个人了)
那个女孩还很骄傲的说了一句:你看,是吧!
真是丢死人了,
大家在什么情况下用dataReader?(别说什么数据不在反复操作下,我要听比如列表之类的东西)
datareader比dataSet强在哪儿,
XX的

解决方案 »

  1.   

    还有DATASet比dataReader强在哪儿
      

  2.   

    SqlDataReader 类提供了一种读取从 SQL Server 数据库检索的只进数据流的方法。如果当创建 ASP.NET 应用程序时出现允许您使用它的情况,则 SqlDataReader 类提供比 DataSet 类更高的性能。情况之所以这样,是因为 SqlDataReader 使用 SQL Server 的本机网络数据传输格式从数据库连接直接读取数据。另外,SqlDataReader 类实现 IEnumerable 接口,该接口也允许您将数据绑定到服务器控件。DataSet作为一个功能强大的、支持离线的数据库,其对性能的开销也相对较大。
    Sqldataread优点:读取数据非常快。如果对返回的数据不需做大量处理的情况下,建议使用SqlDataReader,其性能要比datset好很多。缺点:直到数据读完才可close掉于数据库的连接。
    Dataset是把数据读出,缓存在内存中。缺点:对内存的占用较高。如果对返回的数据需做大量的处理用Dataset比较好些可以减少对数据库的连接操作。优点:只需连接一次就可close于数据库的连接。一般情况下,读取大量数据,对返回数据不做大量处理用SqlDataReader.对返回数据大量处理用datset比较合适.对SqlDataReader和Dataset的选择取决于程序功能的实现。 
    以上内容仅供参考
      

  3.   

    DataReader占用很少的内存向前只读的,因此效率要高。但是对数据检索等处理的能力就比DataSet差多了。当只要求获取数据的时候可以使用DataReader,而对数据处理相对多的时候还是使用DataTable或DataSet相对容易些。
      

  4.   

    DataReader对象是用来读取数据库的最简单方式,它只能读取,不能写入,并且是从头至尾往下读的,无法只读某条数据,但它占用内存小,速度快,有时需要用. 
    dataset就比较强大了,能做很多事情,把数据都取到内存里.
      

  5.   

    DataReader比DataSet要快`~~因为DataReader是一个快速向前读取的指针,而且占用的内存相对于DataSet要少
      

  6.   

    dataset操作数据很容易,也比较方便,要说处理数据还是用ds的好,可以放在内存中,不需每次连数据库
      

  7.   

    DataReader 顾名思义,只读,所以快dataSet 读,写...所以..
      

  8.   

    Dataset主要是保存数据、表的操作不错吧,很多东西datareader做不了的
      

  9.   

    dataSet 与库连接后取到的东西 放在内存上 可用来排序和做整体的处理而 
    DataReader要与库时刻的连接读取,不占用内存的空间 但是对整体的处理不好!各有所长 我水平有限也说不太好,大概意思吧!~
      

  10.   

    dataSet在内存操作
    DataReader要与库时刻的连接读取,需要通过网络传输数据
    大量数据的情况下应该dataset快。
      

  11.   

    他们两个是完全不同的,为什么总要拿来对比呢。
    就好比从上海出发去北京,那么你是自己坐火车去,还是去旅行社报名跟着旅行团去呢?
    显然这两种方法都可以达到你的目的,但过程完全不一样。
    如果你是要旅行,当然可以跟着旅行团去,但如果你只是要去北京办事,当然是自己坐车去了。
    DataReader和DataSet也同样的,虽然他们都可以读取数据,但DataReader就好比自己坐火车去,而DataSet就好比跟团去。
    如果你只是要显示数据,DataReader当然要比DataSet效率高,这就好比你为了去北京出差不会去旅行团报名一样。
    但如果你要对数据进行复杂操作处理,当然要选择DataSet,因为DataReader办不到。
    所以,他们之间没有什么对比关系,按需选择。
    [仅代表个人观点]
      

  12.   

    做了三年了,却不知道DataReader与DataSet的区别??LZ你是真够郁闷的!
      

  13.   

    小弟没有那么强的理论基础,仅仅从自己的体会来瞎侃几句。小弟以前在学校做东西(根本谈不上项目,都是给学校或者学校的某些老师做的小玩意,顺便赚点钱零花)的时候,用的是VB 6.0和ASP。这两个开发环境还没有DataSet这个概念,比如VB6里只有RecordSet这么个ADO对象,其实就是DataReader了,像楼上不少达人所说,就是提供一种只进的读取方式,所以占内存小,速度快,不过比较笨就是了;而至于DataSet,类似于数据库里部分数据的一个拷贝,可以用来继续操作。其实DataReader和DataSet的区别类似于XMLReader和用DOM的方式分析XML文件,前者速度快,占用资源少,但是只进,所以不适合需要灵活访问各个元素的情况;而后者虽然灵活,但是需要把整个对象(数据集/整个XML文档)缓冲到内存里,所以占用资源比较多,而且速度其实不如只进的方式。此为其一。其实真正用在项目中的时候,DataReader和DataSet对于简单的MIS应用是没有区别的,毕竟现在WEB服务器的强大硬件支持可以忽略掉二者的区别。主要的差异个人认为体现在复杂的应用上,比如某些大型门户网站的首页。假设一个网站的首页划分了若干个版块,每个版块的头条都要从数据库中取出,那么假设有这么两种解决方案:1、用DataReader,首先打开数据库连接,然后逐版块取数据并构造HTML代码,最后关闭连接;2、用DataSet,对每个版块开辟一个DataTable/DataSet,为每个DataTable的获取数据方法写SQL语句,并调用DataAdapter分别Fill()这10个DataTable/DataSet,最后统一构造HTML。你会发现可能第2种方法会比第一种方法要慢一些,至少我以前接触过的某个项目是这样,用方法2的时候用户反应响应时间有些长,改用方法1就改善了一些。所以个人觉得,目前Web应用程序的速度瓶颈多半不在WEB服务器上,而在数据库服务器上。请求数据库连接并Open连接需要消耗很多时间(相对运算等其他WEB服务器的操作而言),所以方法1中其实只做了一次数据库连接的OPEN方法,所以节约了不少时间上的开支,因此反应会比方法2略快——毕竟DataAdapter的每次Fill方法其实都是先Open连接,把数据写入XML,再Close连接。所以如果我们把方法2改一下,把10个查询SQL写在一起,然后统一通过DataAdapter去Fill到一个DataSet中,然后通过DataSet的各个DataTable来查找各个版块的数据,这样速度就和方法1差不多了,而且灵活性要比用DataReader高。总结一下,目前Web应用程序最大的速度限制在于数据库,因此要尽量减少请求数据库连接的次数,尽量把所有需要的数据一次性缓冲到DataSet里去,可以有效提高速度。如果每个查询语句都要进行Fill的话,那DataSet的速度肯定是不如DataReader的了。个人胡乱感觉,没什么理论依据,如果说错了的话还请各路高手指点
      

  14.   

    DataReader 比DataSet 快,这是不用置疑的;
    DataReader 但只能是向前,必须是独占的,它常用来检索数据时用,比如,绑定DropDownList.
    取单值时,DataReader 效率比较高.并且通过索引取值最快.如:dr.getString(0)
    但分页时不行,在.net2.0通过转化可以实现分页.
      

  15.   

    DataReader 快,单方向只读如果是第二次用同样的数据从内存中取数据,就DataTable快
      

  16.   

    这个问题就可以简单地比喻成用正则表达式快 , 还是自己分析字符串快 ?其实正则表达式是需要分析字符串的.而DataSet是依靠DataReader读取数据的.虽然自己分析字符串是最快的,
    但是为什么依然有那么多人用正规表达式?
    因为正规表达式容易用.同样DataSet有它的优点.
    例如DataReader不可以缓存.
    而DataSet就可以.所以,不能单说DataSet快还是DataReader快.所以有些时候, 用DataSet的代码, 就会比用DataReader的代码快----
    其实标题那个问题,严禁地表达,应该是指 SqlCommand到DataReader到读取一次数据快 , 还是SqlDataAdapter到DataSet到读取一次数据快.
      

  17.   

    DataReader单方向读取而已,DataSet操作就多了,用小脚趾想想都知道哪个快
      

  18.   

    本人认为DataReader是DataSet在检索数据方面的一个优化,在读取数据时比DataSet速度快(它也只能读取数据),DataSet比DataReader功能强大。在读取数据时使用DataReader,在对数据进行更新、插入、删除时使用DataSet。DataReader直接跟数据库相连,而DataSet要通过DataAdapter和数据库相连
      

  19.   

    拜20楼的 ,真细,我佩服另外,楼主,我也很佩服你... 你应该感谢那个女孩,至少她让你知道了三年来你都不知道的事情,而事实上这个事情很重要,如果你这三年来的程序都是用dataset而没有用到datareader的话,那么效率估计不高
      

  20.   

    DataSet也比较常用,比DataReader用的要广泛的多,只是DataSet集内容很丰富,不但能获得数据库中的数据,而且还能获得表结构和表关系信息,如果在设计时需要对库表结构进行修改,DataSet就派上大用场了,DataReader好就好在查询速度上
      

  21.   

    我做了近7年开发,.net用了近两年,现在还不是连datagrid都不会用.
      

  22.   

    datagrid都不会用,那没关系
    但是如果数据处理之类的话,这些做3年,用哪种的利弊,就应该要很清楚了。
    要反思下了,楼主,呵呵
      

  23.   

    大家误解LZ意思了,他并没说做了3年.NET
      

  24.   

    即便不是三年.net ,既然知道dataset,那么也应该知道datareader吧..  难道还有书上讲dataset而只字不提datareader,楼主异灵...
      

  25.   

    我倒,楼主,真的假的,三年?!连datareader与dataset区别都不知道,效率等都不知道?!
    你三年白活了.
      

  26.   

    偶一年还未到都知道.起码知道datareader占内存少,datareader效率相对dataset应该要高.
    因为前者是只读的.这个是很明显区别.
      

  27.   

    楼主,不是我打击,你学编程有几年时间了,连象"vista是用什么语言编的?"这样的问题都问?!起码要说象"vista是用什么语言编的?"这样的问题问的一点水平都没有.抱歉,我只是说自己的看法.
      

  28.   

    我替楼主悲哀
    三年了都不知道 dataset和dataread的区别 速度差别
      

  29.   

    SqlDataReader对象的速度要比SqlDataAdapter对象快,因为SqlDataAdapter具有读写数据、前向、后向浏览的能力,当然创建的时候开销也大。
    另外,如果只要在单个数据控件中显示数据库查询的结果,而不去处理那些数据,因为只是从数据库端来到本地就可以,而不用返回数据库,所以用SqlDataReader对象是完成该功能的最理想方法。
      

  30.   

    SqlDataReader一定快吗?未必吧SqlDataReader读取数据时,需要数据库连接始终保持着,每次从数据库系统那里去一条记录回来如果数据库系统比较繁忙,资源紧张……
      

  31.   

    偶们一般也是用datareader,很少用dataset哦。
      

  32.   

    支持单纯的浏览查看记录,DataReader是要快点,操作的话还要用DataSet
      

  33.   

    datareader读取数据比dataset更快
    使用datareader读取数据时内存中仅存在下一条待读记录,因此也只能顺序读取。
    而dataset是把整张表都装入内存之后检索,时间比较长一些。
    我认为差别主要在是否与数据库保持连接上,根据不同的需求使用。
      

  34.   

    谁快谁慢真没有认真地测试过。不过我认为DataSet更容易构建分层的编程模型。试想DataReader在读取数据的时候不能中断连接。那就意味着要边读取边处理,你如何一次返回一个完整的对象?到头来还是要把它们放在类似DataTable的数据结构中。
      

  35.   

    没有 必要的时候 
    都不要用dataset
      

  36.   

    DataReader肯定更快了,DataReader是读取行的只进流的方式
      

  37.   

    dataSet读入内存
    DataReader要与库时刻的连接读取,取决于网速
      

  38.   

    楼主想追求该MM,想在MM面前显摆一下,结果被MM问倒了,面子上挂不住。
      

  39.   

    这样看这两个对象用在什么地方,也就是大家常说的,没有绝对的事物存在,SQLDATAREADER  它是一种只读向前的数据流,不能写入!在用那些只是读取的数据的地方,可以用这个!当然DATASET它的功能就比较强大的,不能单独和DATAREADER来比较!这显然。呵呵
      

  40.   

    举一个例子 我构造一个DATASET容器用dataReader里面方法来填充 这个算dataset还是dataReader。
      

  41.   

    个人看法
        dataReader是一个之读数据提供器,也常用作绑定数据源。而DataSet是将数据保存到内存中,允许对内存中的数据进行操作,然后再反映到数据库中,但有一个前提,那就是读出数据之后在较短的一段时间内会有数据操作的请求,否则还是建议使用dataReader。
       dataReader在Web项目中使用比较频繁,而dataset在桌面应用程序中经常使用。因为web项目中从数据库获取完数据,render到page页面,往往还要等client端的用户发出操作命令才会对数据进行修改,也就是在render页面之前,只读的数据就能满足要求。在桌面应用程序中使用dataset可以减少程序与数据库的交互次数,而且可能操作往往是在读取数据之后进行的。   相信楼上有很多朋友是从事asp .net开发的吧,对dataReader的理解肯定会深刻些。
      

  42.   

    DataReader更快是毫无疑问的...DataSet更强大也是毫无疑问的...但强大未必就好...DataSet耗费资源也是毫无疑问的...DataReader+实体类比DataSet更灵活而且不需要保持数据源连接...一般做小东西用DataSet比较快...大项目几乎用不到DataSet...
      

  43.   

    这个不一定的,谁说DataReader就快,DataReader是直接从数据库只能向前读取数据,就是说每次读数据就得往返与数据库与程序间,对于少量记录10几条那当然快,但是对于上千条上万数据,你这样去严重耗费系统资源,而这个时候就取出的数据放在DataSet里,DataSet是缓存在本地内存,从本地内存读取数据速度当然快,所以说要分情况使用这两个东西
      

  44.   

    这个不一定的,谁说DataReader就快,DataReader是直接从数据库只能向前读取数据,就是说每次读数据就得往返与数据库与程序间,对于少量记录10几条那当然快,但是对于上千条上万数据,你这样去严重耗费系统资源,而这个时候就取出的数据放在DataSet里,DataSet是缓存在本地内存,从本地内存读取数据速度当然快,所以说要分情况使用这两个东西
    -----------------------------
    哪个客户有这么NB,能在一个页面里处理成千上万的数据
    这种假设是不符合现实需求的吧
      

  45.   

    我做了三年,结果今天被一个还没毕业的人问住了
    ------------------------------------------
    我很少BS人的,但我这次非要BS LZ一下,看到“三年”这两个字,真是刺眼
      

  46.   

    DATASet与dataReader的不同,首先,DATASet类似一个库结构里面有表,有记录,有字段,是一个内在住留结构,可以读写,而dataReader是一个只读的数据流,如果对于数据量大的表来记取比DATASet性能上要好的多,还有一点就是DATASet是无连结的
      

  47.   

    只提数据 reader
    要加工 用 dataset 罗
      

  48.   

    基本不用dataset,因为我做的系统都比较大,为了性能,只有使用datareader了,除了出报表
      

  49.   

    楼主别灰心,很多时候DataSet的应用是比DataReader快的,例如TreeView使用不管什么方法都避免不了大量的数据操作,比起100次数据库连接,内存里的折腾会更快。
      

  50.   

    支持楼主,也许只是楼主不经常用DataReader的问题,如果三年中我一次也没用过DataReader或者很少用(而且用了没继续想想),我也不会知道之间的区别
      

  51.   

    DataSet虽消耗了客户端的内存,却避免了数据库连接资源的占用,大量数据交互、序列化传输时它能大显身手!
    DataReader尽管消耗少,但要占用数据库连接,但高并发环境的读数据库操作、控件数据绑定和配合连接池提高性能上它就是个宝贝!
    其实没有高下之分,只有在适合的地方用合适的对象才是王道!
      

  52.   

    其实你看看微软的例子就知道petshop,里面采取的是用datareader读数据并且存入泛型的对象里面.这样的模式很不错
      

  53.   

    显然Reader比set快
    但是set能做的事情有很多Reader做不了
      

  54.   

    想我当前还没写代码就知道datareader比dataset快哈哈,楼主是实践型的,估计从不看书.
      

  55.   

    DataReader 当然比DataSet快........其实DataSet也只是封装了DataReader 并组织了结构和关系而已其实我个人很不喜欢DataSet
    推荐用 IList<T>
    强类型 用代码生成器初始化T