社区
C#
帖子详情
求助 DataReader和DataSet 有什么相同点 和不同点
gxw19820801
2008-08-21 08:54:16
这是个面试题大家帮帮我吧
...全文
417
12
打赏
收藏
求助 DataReader和DataSet 有什么相同点 和不同点
这是个面试题大家帮帮我吧
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
gxw19820801
2008-08-21
打赏
举报
回复
谢谢大家了
sxmonsy
2008-08-21
打赏
举报
回复
[Quote=引用 3 楼 amandag 的回复:]
相同点:都可以用来读数据
不同点:
1.DataReader独占连接,只读只进
2.DataSet支持断开式连接,支持增删改操作
[/Quote]
GhostAdai
2008-08-21
打赏
举报
回复
5楼复制的那一大篇说得够详细的了,不过面试说这一大篇就累得慌了。
panw520
2008-08-21
打赏
举报
回复
[Quote=引用 7 楼 LuckyMouse_ZJU 的回复:]
引用 3 楼 amandag 的回复:
相同点:都可以用来读数据
不同点:
1.DataReader独占连接,只读只进
2.DataSet支持断开式连接,支持增删改操作
补充一下:
1.DataSet常和DataAdapter一起使用,效果更好!
2.DataSet/DataTable只是给出一种数据保存格式,可以自己建立一个临时的内存数据库,不一定需要和数据库相关。
尤其是你需要恢复数据的时候,有奇效,我喜欢。
[/Quote]
stning
2008-08-21
打赏
举报
回复
3楼的解释就对了啊
LuckyMouse_ZJU
2008-08-21
打赏
举报
回复
[Quote=引用 3 楼 amandag 的回复:]
相同点:都可以用来读数据
不同点:
1.DataReader独占连接,只读只进
2.DataSet支持断开式连接,支持增删改操作
[/Quote]
补充一下:
1.DataSet常和DataAdapter一起使用,效果更好!
2.DataSet/DataTable只是给出一种数据保存格式,可以自己建立一个临时的内存数据库,不一定需要和数据库相关。
尤其是你需要恢复数据的时候,有奇效,我喜欢。
newcomer123
2008-08-21
打赏
举报
回复
DataReader是面向连接的,DataSet则不是面向连接的。
DataReader是只向前的数据流。DataSet 可以一次把大量数据保存。
脆皮大雪糕
2008-08-21
打赏
举报
回复
我经常听到有人问这个问题:“在ASP.NET Web应用程序中我应该用DataReader类还是DataSet类呢?”在很多文章以及新闻组的贴子中我经常看到这样的误解,即认为DataReader(SqlDataReader或OleDbDataReader的缩写)比DataSet好。有时候我也会看到相反的说法。事实上,Microsoft创建了这两个数据存取类是因为它们都是我们所需要的。每个类都有其优点和不足,你可以根据应用环境来选择用哪一个。
本文就两者的选择问题做了很清楚的讲述,可以让你在运用asp.net时,在选择datareader类或dataset类的方面得到一些指南。在基于客户端的windows Form应用程序环境下,这些规则可能会改变。我在做这些讲述时,假设你已经用过DataReader和DataSet类了,并对它们很熟悉。
运用datareader类
下面就是运用DataReader类的理想条件: 你读取的数据必须是新的,所以在每次需要数据的时候,你都必须从数据库读取。创建一个DataReader类不会消耗很多内存,不过随着负荷的增加,DataSet上的性能也会很快地提高(参考资源中Visual Studio Magazine中的文章)。
你对每行数据的需求很简单。该情况的最好的例子就是简单地将datareader绑定到一个web控件,如datagrid或dropdownlist。
你只需要从数据库中以只向前的(forward-only) 、只读的形式来存取XML数据。在这种情况下,你可以用SQLCommand对象的ExcecuteXmlReader()方法来得到一个XmlReader类(相当于XML版的DataReader)。这就需要一个运用FOR XML子句的SQL Server查询,或者一个包含有效XML的ntext字段。
你计划对数据库进行几个重复的调用,来读取一小块信息。在这种情况下,我们前面提到过的性能数据会有更大的提高。
的确,使dataset类更强大的许多功能只适用于基于客户端的windows Form应用程序,比如在多个表之间建立关系的功能。在很多情况下,DataSet类都比DataReader类更有优势,而且在有些情况下,你根本就不能用DataReader类。
运用dataset类
在下面的情况,你应该考虑运用DataSet类: 你构建了一个Web service,它运用的数据是你作为返回值读取的数据。因为DataReader类必须保持到数据库的连接,所以它们不能被序列化到XML中,也不能被发送给一个Web service的调用者。
你需要排序或筛选数据。在运用一个dataview对象(呈现为datatable类的defaultview属性,它包含一个dataset类)来排序或筛选数据前,我们先试着用sql查询(如where和order BY语句)来实现这些功能,并运用更轻量级、更快的DataReader类。然而,有时侯用这种方法是不行的,或者当你需要多次地对数据进行排序或筛选时就不能用DataReader。
针对同一请求,你需要多次遍历数据。你只能在datareader中循环一次。如果你想将多个servercontrol类绑定到同一个数据集,那么选择dataset就更好。datareader类不能被绑定到多个servercontrol类,因为它是只向前读取的。在这种情况下,如果要使用datareader,必须从数据库读取两次数据。
你需要存储数据,而后续的页面请求可能会用到的这些数据。如果数据只被请求它的专门的人使用,你可以将dataset类保存在一个session变量中。如果数据可以被任何人访问,那么你可以将它保存在一个application变量中,或保存在cache中(我建议使用后一种方法,因为它支持时间期限和回调(callback))。因为datareader类必须一直打开对数据库的连接,而且它一次只能保存一行数据,所以它们不能在跨页面请求中被保存。
你需要对一个结果集的每个元素实现特殊的、耗时的功能。例如,如果你从一个数据库读取一列邮政编码,并想通过调用一个web service来得到每个地区的详细的天气状况信息,那么选择DataSet就会更好。这是因为,当你在用DataReader类时,在关闭DataReader类前,与数据库的连接不会被释放回连接池。在数千页面请求之间潜在的一个很小的延时都会造成Web应用程序的很高的访问量,从而就会消耗完可用的连接。相反,DataSet可以在前端读取所有的数据,并可以马上关闭与数据库的连接,将它返回到连接池,因此其它的页面请求就可以用这个连接了。
你需要在一个两维范例中加载并处理xml数据。dataset类对于xml很有用,因为你可以将dataview用于xml,对根本的数据进行排序和筛选,就同处理一个数据库结果集一样。然而,需要注意的是在system.xml名字空间中有很多类,你可以将它们用于更复杂的xml操作。
你的数据源不是一个数据库。虽然oledbdatareader可以用于任何oledb数据提供者(可能指向一个数据库,也可能不指向一个数据库),但dataset对象可以从一个xml文件直接加载数据,并动态地解释它的schema。dataset类也可以将xml数据写回一个数据流或一个文件。
从上面的讲述我们就可以看到,dataset类比datareader类有更多的功能,这就可以让你在更多的情况下运用它们。但这并不意味着你总是在用dataset类。你需要在asp.net中完成的相当大一部分的任务都属于datareader的范畴。
尽管如此,毫无疑问,从重要程度或复杂程度的角度来说,dataset类在很多asp.net Web应用程序中都起着很重要的作用。你可以通过明智的缓存来最小化数据库往返,从而降低DataSet类的“性能损害”。DataReader和DataSet都是一个成功的ASP.NET Web应用程序的重要的部件。重要的是,我们需要了解何时、在哪里可以最好的使用它们。
wheeler
2008-08-21
打赏
举报
回复
一个只读,一个可改,这是最大最明显的区别
amandag
2008-08-21
打赏
举报
回复
相同点:都可以用来读数据
不同点:
1.DataReader独占连接,只读只进
2.DataSet支持断开式连接,支持增删改操作
gxw19820801
2008-08-21
打赏
举报
回复
呵呵
HW_zxc_005
2008-08-21
打赏
举报
回复
up
C# ADO.NET数据库教程(Visual Studio 2019)
基于Visual Studio 2019和SQL Server2012环境下,主要讲解C#中ADO.net的操作,涉及:如何导入、如何数据库连接测试、Connection类的语法和使用、Command类的语法和使用、
DataReader
类的语法和使用、实现数据库的增、删、改、操作;
.NET常见面试题
一、 .NET基础部分 Linq查询,lambda表达式 LINQ(Language Integrated Query,语言集成查询)提供了一种跨数据源和数据格式的统一模型,实现查询。主要包括三个部分:LINQ to Objects、LINQ to XML、LINQ enabled ADO.NET,而在LINQ enabled ADO.NET中又包括LINQ to
DataSet
、LINQ to SQL 和 LINQ to Entities。 “Lambda 表达式”是一种简化的...
【供批判】所谓的java十宗罪
某日于CSDN论坛上看到的~~ 大家瞅瞅附原帖地址:http://topic.csdn.net/u/20110617/15/e9393695-c35b-480e-90e0-6ab74ae29737.htmljava十宗罪好吧,我知道看这标题很多人就忍不住要拍砖或表示不赞同了,我都接受。我在遇到问题时,找一些搞java朋友
求助
,有能解决的,我想说的是不能解决的情况下,他们大多会说:“你怎
高并发高负载系统架构
本文作者在Cernet做过拨号接入平台的搭建,而后在Yahoo3721负载搜索引擎前端平台开发,又在猫扑处理过大型社区猫扑大杂烩的架构升级等工作,同时自己接触和开发过不少大中型网站的模块,因此在大型网站应对高负载和并发的解决方案上有一些积累和经验,可以和大家一起探讨一下。 一个小型的网站,比如个人网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个
26. 连接器
26.1. MySQL Connector/ODBC 26.1.1. MyODBC介绍26.1.2. 关于ODBC和MyODBC的一般信息26.1.3. 如何安装MyODBC26.1.4. 在Windows平台上从二进制版本安装MyODBC26.1.5. I在U
C#
110,534
社区成员
642,575
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章