问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

datareader和dataset的异同

发布网友 发布时间:2022-04-11 00:53

我来回答

2个回答

懂视网 时间:2022-04-11 05:15

strConnect = "Data Source=localhost;Initial Catalog=cmsw;Integrated Security=True; Application Name=pgq"; DataSet dsCode = new DataSet(); using (SqlConnection sqlConn = new SqlConnection(strConnect)) { sqlConn.Open(); SqlDataAdapter sda = new SqlDataAdapter("SELECT top 200000 TRANCODE from JobRecord ", sqlConn); sda.Fill(dsCode, "Test"); sqlConn.Close(); } DateTime dt1 = DateTime.Now; foreach (DataRow dr in dsCode.Tables[0].Rows) { using (SqlConnection sqlConn = new SqlConnection(strConnect)) { string code = dr["TRANCODE"].ToString(); SqlCommand cmd = new SqlCommand("SELECT * from JobRecord WHERE TRANCODE=@TRANCODE ", sqlConn); cmd.Parameters.AddWithValue("TRANCODE", code); sqlConn.Open(); SqlDataReader dataRead = cmd.ExecuteReader(); if (dataRead.Read()) { Console.WriteLine("One Cycle:{0}",dataRead["TRANCODE"]); } sqlConn.Close(); } } DateTime dt2 = DateTime.Now; TimeSpan ts1 = dt2 - dt1; Console.Clear(); Console.WriteLine("Total MilSeconds:{0}", ts1.Milliseconds); DataSet dsTest2 = new DataSet(); using (SqlConnection sqlConn = new SqlConnection(strConnect)) { sqlConn.Open(); SqlDataAdapter sda = new SqlDataAdapter("SELECT top 200000 * from JobRecord ", sqlConn); sda.Fill(dsTest2, "dsTest2"); sqlConn.Close(); } int serialNo = 0; while (serialNo < 200000) { Random rand = new Random(); int index = rand.Next(1, 200000); var code = dsTest2.Tables[0].AsEnumerable() .Where(r => r.Field<string>("TRANCODE") == dsCode.Tables[0].Rows[index]["TRANCODE"].ToString()) .Select(r => r.Field<string>("TRANCODE")).ElementAtOrDefault(0); Console.WriteLine("Scend Cycle:{0}",code); serialNo++; } DateTime dt3 = DateTime.Now; TimeSpan ts2 = dt3 - dt2; Console.WriteLine("First Result, TotalSeconds:{0}; Second Result TotalSeconds:{1}", ts1.TotalSeconds, ts2.TotalSeconds); Console.ReadLine();

 

将数据一次性加载到DataSet与逐行从DB内读取的性能比较

标签:校验   apt   next   select   reac   init   nec   方式   value   

热心网友 时间:2022-04-11 02:23

第一种解释
DataReader和DataSet最大的区别在于,DataReader使用时始终占用SqlConnection(俗称:非断开式连接),在线操作数据库时,任何对SqlConnection的操作都会引发DataReader的异常。因为DataReader每次只在内存中加载一条数据,所以占用的内存是很小的。由于DataReader的特殊性和高性能,所以DataReader是只进的,你读了第一条后就不能再去读取第一条了。
DataSet则是将数据一次性加载在内存中,抛弃数据库连接(俗称:断开式连接)。读取完毕即放弃数据库连接,因为DataSet将数据全部加载在内存中,所以比较消耗内存。但是确比DataReader要灵活,可以动态的添加行,列,数据,对数据库进行回传,更新操作等。

第二种解释
使用DataReader与DataSet都可以从数据源读取数据。DataReader本身是通过IDbCommand.ExecuteReader()方法进行构建的;而DataSet则是通过DbDataAdapter.Fill()方法进行填充。此外,两者的工作方式有明显的不同:DataReader的执行过程不能脱离数据库连接,也就是在DataReader读取数据的时候不能够使用IDbConnection.Close()方法关闭数据库连接;而在使用DataSet获取数据时,可以断开数据库的连接,因为此时DbDataAdapter已经负责将数据获取到应用服务器中了。
由于有这样的区别,所以在开发数据库相关程序时需要特别注意。例如在使用DataReader获取数据后,应该主动地关闭数据库连接,否则可能出现数据库连接池溢出的异常。

第三种解释
可以使用DataReader类的对象或DataSet类的对象从数据库读取数据,但它们是有区别的,归纳起来大致有以下几条:
1. DataReader是数据管理提供者类,而DataSet是一般性数据类。
2. DataSet获取数据需要通过桥梁DataAdapter的填充,由于DataReader本身就是管理提供者,它可以通过Command的ExecuteReader()方法就可以获取数据。
3. DataReader是在线处理,当连接关闭后就不能读取数据;DataSet可以离线处理数据,它是把数据从数据库拷贝到本地存储,在关闭连接的情况下仍然可以在DataSet中处理数据,甚至可以在本地存储的表格中增加*。
4. DataReader只能正向读取数据,但不能修改数据;DataSet可以按任何顺序读行,可以按灵活的方式搜索、排序和过滤这些行,甚至可以改变这些行,然后将这些改变同步到数据库中。
5. 从DataReader读取数据的速度快于DataSet。
6. 由于DataSet是离线处理,所以当在事务处理中要锁定数据库时,不可以使用DataSet。因为当DataSet被填充以后,会自动断开与数据库的连接,此时不可能再对数据库进行锁定。

可以看出,在通常情况下,DataSet与 DataReader可能可以相互代替,当有特定要求时却需要仔细分析,到底使用哪种方式更合适。
DataReader与DataSet最根本的区别就在于一个是在线处理,另一个是离线处理。在线时,得到的是数据库当前的真实数据,但总是在线的话,增加了网络的通讯负担。离线后数据拷贝在本地,可以减轻网络负担,程序处理数据更加方便,若离线时间过长,看到的数据就不一定是真实的数据了。
补充经验:大数据量上使用DataSet和DataReader混用,当单表数据量很大时,使用DataSet是一种很不明智的选择,因为DataSet是以DataTable内存形式存放数据,一次性将很大数据放入内存,这是非常吃内存的。相比DataSet,DataReader就显得优雅很多,它是每次只读取一条数据,然后循环调用机制。但它也有弊端,就是相对非断开连接,但是对内存消耗而言这是有利的。DataSet在大部分应用场景下也是有自己优点的,比如充分解耦、一次操作、领域模型操作等。
所以要根据不同场景合理使用这两种对象。
datareader和dataset的异同

1. DataReader是数据管理提供者类,而DataSet是一般性数据类。2. DataSet获取数据需要通过桥梁DataAdapter的填充,由于DataReader本身就是管理提供者,它可以通过Command的ExecuteReader()方法就可以获取数据。3. DataReader是在线处理,当连接关闭后就不能读取数据;DataSet可以离线处理数据,它是把数...

DataReader和DataSet的异同

DataSet在 IIS 服务器上所使用的内存较多。DataReader在 IIS 服务器上所使用的内存较少。综上所述得出DataSet和DataReader有各自适用的场合。如果数据来源控件只是用来填入控件的清单成为其选项,或者数据绑定控件并不需要提供排序或分页功能的话,则应该使用 DataReader。反之,如果数据绑定控件需要提供排序或...

C#之 DataReader 和 DataSet 的区别

DataSet是一数据存储的类,你可以把数据库中的数据读取到内存中,在内存中按照DataSet这种格式进行数据的统计。而DataReader是一种读取数据的方式,也可以认为是内存中数据与数据库中数据的一种桥梁,例如,我们可以通过DataReader把数据库中数据读到内存表中(DataSet)中。而DataReader与DataAdapter是有可比...

C#中IDataReader和DataSet的区别是什么呢?

datareader和dataset最大的区别在于,datareader使用时始终占用sqlconnection,在线操作数据库..任何对sqlconnection的操作都会引发datareader的异常..因为datareader每次只在内存中加载一条数据,所以占用的内存是很小的..因为datareader的特殊性和高性能.所以datareader是只是向前读的 读了第一条后就不能再去...

c# DataReader和用DataAdapter来填充DataSet 两者的效率的区别有多大...

表面上看 DataReader 要比 DataSet效率高.因为DataReader是在线读取,也就是说在DataReader 读取数据期间,客户端和数据库之间始终保持一个连接,一次只读一条数据;而DataSet从数据库中读取一堆数据 到 客户端后就可以断开和数据库的连接了.用 DataReader 会使数据库服务器的压力增大,会降低数据库服务器...

C#中IDataReader和DataSet的区别是什么呢?

用connection对象和command对象与数据库连接并交互后,有两种方法来访问获取的结果。1.使用DataReader对象,用来逐行从数据源获取数据并处理;2.使用DataSet对象,用来将数据存到内存中进行处理。

SqlDataRead和Dataset的区别

Dataset是把数据读出,缓存在内存中。缺点:对内存的占用较高。如果对返回的数据需做大量的处理用Dataset比较好些可以减少对数据库的连接操作。优点:只需连接一次就可close于数据库的连接 一般情况下,读取大量数据,对返回数据不做大量处理用SqlDataReader.对返回数据大量处理用datset比较合适.对SqlData...

c# 中 sqldatareader 和 sqldataadapter 、dateset的比较

上面两种方案中,比较如下:1.性能。DataSet中的数据完全保存在内存中,所以会占用内存。但是通常情况下DataReader读出的数据实例化以后也是在内存中的,所以两者没有多大区别。但是,当数据量极大的情况下,使用DataSet时,不论是你分页还是不分页,它的效率之低,和SqlDataReader相比都是不可同日而语的,...

用SqlDataReader和SqlDataAdapter读取数据有啥区别?

这个是这样的,SqlDataReader只能用于读,在读的过程中数据库一直保持打开状态,不过读的效率还是可以的 SqlDataAdapter(数据适配器)、DataSet 先将数据取出来放到dataset中,然后就可以关闭数据库了,通过sqldataadapter还可以更新删除数据库中的东西,功能很强大,要好好学习。像绑定某些数据源之类的话强烈...

ASP.NET如何进行性能优化问题

Dataset是把数据读出 缓存在内存中 缺点 对内存的占用较高 如果对返回的数据需做大量的处理用Dataset比较好些可以减少对数据库的连接操作 优点 只需连接一次就可close于数据库的连接 *一般情况下 读取大量数据 对返回数据不做大量处理用SqlDataReader 对返回数据大量处理用datset比较合适 对SqlDataReader和Dataset的选...

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
电脑开机时怎么进入安全模式 广东医学院大一新生宿舍怎么样,是不是都是学校分配,不能自己选择_百度... 2012高考理科 考到545 想知道怎么填志愿 我的分数545可以报广东医学院边d专业?我系广东考生 高考排名。高考报志愿。广东医学院。 今年545分补录广东医学院还有机会吗? 徒步穿什么鞋 夫妻之间感情再不好都不要去互相伤害 平时可以穿登山鞋吗 大学生都爱去哪些网站? 信阳黑龙潭的介绍 孩子骑车需要如何保护不受伤害? 黑龙潭旅游风景区 怎么才能保证孩子骑行过程中的安全?我家小孩8岁左右,骑车容易摔 密云黑龙潭的传说你听过吗,旅游攻略 信阳市黑龙潭 黑龙潭旅游风景区的介绍 淘宝会员id在哪里查看 关于去黑龙潭? 北京黑龙潭旅游攻略 十几岁小孩骑自行车如何保护自己? 车玻璃的干了就是发白,怎么处理好? 黑龙潭旅游风景区的主要景点 黑龙潭自然风景区怎么样? 听说信阳有个叫黑龙潭的地方,有谁知道那里?听说那风景很好,过段时间想去那玩下 求公务员考试题目解答 安徽公务员历年面试题 安徽省公务员面试题库 安徽省公务员录用考试专业教材的目录 安徽省历年公务员考试真题及答案,最好是WORD格式的 为什么玻璃表面一层白的擦不掉? 14岁能骑自行车上路吗? 信阳黑龙潭毛尖! 信阳附近还有哪里好玩的?我们新概念牙科准备出去游玩,附近的都去了,想大家推荐个一天来回的。 热水杯经常放玻璃上玻璃形成一层白色的雾状物,怎么清洁? 一个女人的七本日记是什么 一个女人的七本日记 最后怎么处理的 怎么除去玻璃上的白茫茫的污渍 金樱子泡水喝治肾虚吗?有没有副作用 一个女人的七本日记,强烈建议*督察!彻查始末!!!有一个细节说明了,那个工商人员在说谎,就是200 玻璃上面出现了白化现象,请问有什么清洁剂可以解决? 是自贡的朋友去看看 :一个女人的七本日记: 关于九鼎--王杰---离婚--分家产一事- 王杰的成就就败给一个女 一个女人的七本日记是什么? 苹果微信占用空间越来越大 其他数据是啥意思 一个女人的七本日记 大家有看过的吗,网上有下载的吗 信阳有哪些旅游圣地? 俺找一个女人的七篇日记 一个女人7本日记 一个女人的气本日记 想知道:信阳市 从信阳农林学院新校区到黑龙潭景区怎么坐公交? 钢化玻璃出现了一层白色雾状物,怎么清除 今日说法 亿万富豪离婚记的后续追踪是第几期,名字是什么