DataReader和DataSet的异同


Posted in 面试题 onDecember 31, 2014
DataSet的定义:对象是ADO。NET中非连接存储和关系型数据处理的基础数据对象。可以将从数据库中取得的数据集合全部存储于DataSet对象中,操作存储于DataSet的数据,然后再次连接到数据库,根据DataSet的数据更新目前数据库中的数据。
DataSet的主要方法:
1 Clear:清空DataSet的所有DataTable
2 Merge把两个DataSet合并成一个
3 AcceptChanges更新对DataSet的所有更改
4 GetChanges获得对DataSet进行的所有更改
5 HasChanges判断是否有对DataSet进行更改
6 放弃对DataSet对数据库进行的更改
对象:1 DataTable 记录集(相当于表)
2 DataColumn 记录集的字段(相当于列)
3 DataRow 记录(相当于行)
4 DataView 数据视图,是基于DataSet对象中数据的查询条件的。
5 DataRelation 定义不同DataTable 之间的关系
写了一个DataSet的代码清单
DataSet ds=new DataSet();
DataTable dt1=new DataTable();
DataTable dt2=new DataTable();
DataColumn dc1=new DataColumn(“a1″,typeof(int));
DataColumn dc1=new DataColumn(“a2″,typeof(int));
DataColumn dc1=new DataColumn(“a2″,typeof(int));
DataColumn dc1=new DataColumn(“a3″,typeof(int));
dt1.Column.Add(dc1);
dt1.Column.Add(dc2);
dt2.Column.Add(dc2);
dt2.Column.Add(dc3);
ds.Tables.Add(dt1);
ds.Tables.Add(dt2);
//在dt1和dt2之间建立一个名为a2的DataRelation
ds.Relation.Add(“a2″,ds.Tables["dt1"].Column["a2"],Tables["dt2"].Column["a2"]);
对象是对数据集合进行向前数条的读取
DataSet和DataReader都可以完成对数据的操作和存储
DataReader对数据读取方便而且快 ,而DataSet有强大的数据库操作功能和非连接访问模式
DataReader和DataSet最大的区别:DataReader使用时始终占用SqlConnection,在线操作数据库..任何对SqlConnection的操作都会引发DataReader的异常..因为DataReader每次只在内存中加载一条数据,所以占用的内存是很小的..因为DataReader的特殊性和高性能.所以DataReader是只进的 读了第一条后就不能再去读取第一条了
DataSet则是将数据一次性加载在内存中.抛弃数据库连接..读取完毕即放弃数据库连接..因为DataSet将数据全部加载在内存中.所以比较消耗内存…但是确比DataReader要灵活..可以动态的添加行,列,数据.对数据库进行回传更新操作
应用:
1 当需要操作非连接数据,将数据发送到应用程序或客户端,提供使用者进行更改之后更新数据库的时候,用DataSet
2 当需要存储、传输、操作多个数据库表时,并且表之间存在着数据关系时,用DataSet
3 需要对数据进行调度操作时,如:数据分页浏览或跳转到固定记录的时候用DataSet
4 当需要一次性读取数据到客户端而且没有更新删除操作时建议使用DataReader
5 需要遍历一个数据集,对数据的每条记录进行只读时用DataReader

Tags in this post...

面试题 相关文章推荐
C/C++程序员常见面试题一
Dec 08 面试题
广州地球村科技数据库题目
Apr 25 面试题
汇智创新科技发展有限公司
Dec 06 面试题
一些网络技术方面的面试题
May 01 面试题
介绍一下如何利用路径遍历进行攻击及如何防范
Jan 19 面试题
C#里面可以避免一个类被其他类继承么?如何?
Sep 26 面试题
编程实现去掉XML的重复结点
May 28 面试题
Linux的主要特性
Oct 06 面试题
介绍一下Python下range()函数的用法
Nov 07 面试题
值传递还是引用传递
Feb 08 面试题
Servlet方面面试题
Sep 28 面试题
Tomcat的缺省是多少,怎么修改
Apr 09 面试题
NET程序员上机面试题
May 23 #面试题
什么叫应用程序域?什么是托管代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释?
May 23 #面试题
.NET程序员的数据库面试题
Oct 10 #面试题
诺思信科技(南京)有限公司.NET笔试题答案
Jul 06 #面试题
什么是托管函数?托管函数有什么用?
Jun 15 #面试题
什么是.net
Aug 03 #面试题
delegate与普通函数的区别
Jan 22 #面试题
You might like
PHP执行批量mysql语句的解决方法
2013/05/02 PHP
浅析PHP中Collection 类的设计
2013/06/21 PHP
一个PHP二维数组排序的函数分享
2014/01/17 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
你需要知道的JavsScript可以做什么?
2007/06/29 Javascript
json简单介绍
2008/06/10 Javascript
(jQuery,mootools,dojo)使用适合自己的编程别名命名
2010/09/14 Javascript
基于JavaScript实现一定时间后去执行一个函数
2015/12/14 Javascript
Javascript基于对象三大特性(封装性、继承性、多态性)
2016/01/04 Javascript
jquery实现简单的遮罩层
2016/01/08 Javascript
详解Jquery实现ready和bind事件
2016/04/14 Javascript
关于javascript中限定时间内防止按钮重复点击的思路详解
2016/08/16 Javascript
Web打印解决方案之普通报表打印功能
2016/08/29 Javascript
Express与NodeJs创建服务器的两种方法
2017/02/06 NodeJs
jquery仿京东商品放大浏览页面
2017/06/06 jQuery
vue-router2.0 组件之间传参及获取动态参数的方法
2017/11/10 Javascript
解决vue中修改export default中脚本报一大堆错的问题
2018/08/27 Javascript
vue实现路由懒加载及组件懒加载的方式
2019/06/11 Javascript
Vue实现数据请求拦截
2019/10/23 Javascript
JS判断浏览器类型与操作系统的方法分析
2020/04/30 Javascript
使用Python的Twisted框架编写简单的网络客户端
2015/04/16 Python
python 日期操作类代码
2018/05/05 Python
Python绘制的二项分布概率图示例
2018/08/22 Python
调用其他python脚本文件里面的类和方法过程解析
2019/11/15 Python
python 检查数据中是否有缺失值,删除缺失值的方式
2019/12/02 Python
关于Pytorch的MNIST数据集的预处理详解
2020/01/10 Python
python实现简单学生信息管理系统
2020/04/09 Python
关于python 的legend图例,参数使用说明
2020/04/17 Python
Pandas之read_csv()读取文件跳过报错行的解决
2020/04/21 Python
Python爬虫获取豆瓣电影并写入excel
2020/07/31 Python
css3 按钮样式简单可扩展创建
2013/03/18 HTML / CSS
电子狗项圈:eDog Australia
2019/12/04 全球购物
党员检讨书范文
2014/12/27 职场文书
初中生思想道德自我评价
2015/03/09 职场文书
2015国庆节66周年标语
2015/07/30 职场文书
浅谈Nginx 中的两种限流方式
2021/03/31 Servers