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 04 面试题
杭州SQL浙江浙大网新恩普软件有限公司
Jul 27 面试题
什么是数据抽象
Nov 26 面试题
北京RT科技有限公司.net工程师面试题
Feb 15 面试题
NET程序员上机面试题
May 23 面试题
一篇.NET面试题
Sep 29 面试题
C#怎么让一个窗口居中显示?
Oct 20 面试题
你所在的项目是如何确定版本号的
Dec 28 面试题
请问软件开发中的设计模式你会使用哪些
May 13 面试题
举例说明类变量和实例变量的区别
Jun 30 面试题
Shell脚本如何向终端输出信息
Apr 25 面试题
DELPHI中如何调用API,可举例说明
Jan 16 面试题
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
file_get_contents("php://input", "r")实例介绍
2013/07/01 PHP
php的hash算法介绍
2014/02/13 PHP
PHP中nowdoc和heredoc使用需要注意的一点
2014/03/21 PHP
PHP类的自动加载与命名空间用法实例分析
2020/06/05 PHP
Jquery实现上下移动和排序代码
2016/10/17 Javascript
微信小程序 保留小数(toFixed)详细介绍
2016/11/16 Javascript
理解javascript中的闭包
2017/01/11 Javascript
JavaScript基本类型值-Undefined、Null、Boolean
2017/02/23 Javascript
angular-cli修改端口号【angular2】
2017/04/19 Javascript
使用 Node.js 对文本内容分词和关键词抽取
2017/05/27 Javascript
JS通过调用微信API实现微信支付功能的方法示例
2017/06/29 Javascript
Vuejs中使用markdown服务器端渲染的示例
2017/11/22 Javascript
React数据传递之组件内部通信的方法
2017/12/31 Javascript
JavaScript实现浅拷贝与深拷贝的方法分析
2018/07/05 Javascript
在Vue methods中调用filters里的过滤器实例
2018/08/30 Javascript
React手稿之 React-Saga的详解
2018/11/12 Javascript
JavaScript运动原理基础知识详解
2020/04/02 Javascript
js实现批量删除功能
2020/08/27 Javascript
在Vue中获取自定义属性方法:data-id的实例
2020/09/09 Javascript
[04:48]DOTA2上海特锦赛小组赛第三日 TOP10精彩集锦
2016/02/28 DOTA
11个并不被常用但对开发非常有帮助的Python库
2015/03/31 Python
python 设置文件编码格式的实现方法
2017/12/21 Python
linecache模块加载和缓存文件内容详解
2018/01/11 Python
shell命令行,一键创建 python 模板文件脚本方法
2018/03/20 Python
python循环输出三角形图案的例子
2019/11/22 Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
2020/06/10 Python
python获得命令行输入的参数的两种方式
2020/11/02 Python
用CSS3的box-reflect来制作倒影效果
2016/11/15 HTML / CSS
美国和加拿大计算机和电子产品购物网站:TigerDirect.com
2019/09/13 全球购物
linux下进程间通信的方式
2014/12/23 面试题
年度评优评先方案
2014/06/03 职场文书
教师党员个人整改措施材料
2014/09/16 职场文书
2014年综治维稳工作总结
2014/11/17 职场文书
学生会主席任命书
2015/09/21 职场文书
canvas多重阴影发光效果实现
2021/04/20 Javascript
CSS font-variation 可变字体的魅力(实例详解)
2022/03/03 HTML / CSS