SqlDataReader 高效,功能弱,只读访问
SqlDataAdapter 强大,要求资源也大一点

SqlDataReader 只能在保持跟数据库连接的状态下才可以读取。。。

SqlDataAdapter 大多情况下是一次性读取一个表,然后填充到DataSet中,然后就可以断开跟数据库的连接了。

两者区别主要是   在线 和 离线 的区别。。。。。

一:
SqlDataReader rd;
rd=cmd.ExecuteReader();

比较高效,如果只是显示数据,当然要用这个

二:
SqlDataAdapter adapter=new SqlDataAdapter(cmd);
ADO.Net里有两类,连线 离线
离线的就是DataSet等,可以把数据取出来放进去,然后断开连接,节省服务器资源
当你在本地做了更改后,再连上数据库进行更新
这种取数据和更新数据的工作就是由SqlDataAdapter做的,他是“延长的电线”--这个比喻好像出自《ado.net技术内幕》

SqlDataReader //基于连接,只读访问 适合数据量较小
SqlDataAdapter //基于非连接,适于数据量较大时,可以另行修改,最后再把修改结果返回给数据库。要求资源也大一点

SqlDataReader像一个链表一样,只能往一个方向读数据
SqlDataAdapter的功能就像他们说得非常强大了

1.SqlDataReader返回的是一个数据读写器,只能一条条的读,操作起来不灵活,一般在只读的时候才用到。
2.SqlDataAdapter返回的是数据集或者表,可以对其中的数据作任意操作

SqlDataReader是个数据读取器,向前不可后退、每次只读取一条。速度快,现代项目里面用它用得最多。
DataSet是个内存数据库,它与其它两个是根本不一样的。
SqlDataAdapter是个数据适配器,工作于DataSet和数据库之间,负责将数据从数据源读出来放在DataSet中,或将DataSet中的更改更新回数据库。

所以以上可以综合成两种模式:1是SqlDataReader一条一条读(通常这后面会跟有实体转化相关的);2是使用SqlDataAdapter和DataSet。

上面两种方案中,比较如下:
1.
性能。DataSet中的数据完全保存在内存中,所以会占用内存。但是通常情况下DataReader读出的数据实例化以后也是在内存中的,所以两者没有
多大区别。但是,当数据量极大的情况下,使用DataSet时,不论是你分页还是不分页,它的效率之低,和SqlDataReader相比都是不可同日而
语的,尤其是你在分页情况下,使用DataReader可以只读所需数据,网络流量可以很小,但是DataAdapter还是必须全部读出,网络流量你很
难优化,除非你自己去深入控制。
2.方便。DataSet数据保存在内存中,可以用Adapter一次性填充,乍看方便不少,其实不然。由于
dataset中的数据都是弱类型的,你用的时候不得不大量使用索引、强制类型转换、类型转换来完成读取任务,麻烦而且易错。从这方便来说,在读取数据时
那么一点方便是不可取的。
3.离线。DataSet是离线的,数据读取后可以关闭数据库连接,但是DataReader则必须在使用数据的时候
一直连接数据库。现在的项目中大多使用实体(Entity)来保存从DataReader中读取的数据,也能实现离线的目的,虽然麻烦一点,但是后期很方
便使用。

ADO.NET提供以下两个对象,用于检索关系数据并将其存储在内存中:DataSet和DataReader。
    DataSet提供一个内存中数据的关系表示形式,一整套包括一些表在内的数据(这些表包含数据、对数据进行排序并约束数据),以及表之间的关系。

DataReader提供一个来自数据库的快速、仅向前、只读数据流。当使用DataSet时,经常会利用DataAdapter(也可能是
CommandBuilder)与数据源进行交互。当使用DataSet时,也可以利用DataView对DataSet中的数据应用排序和筛选。也可以
从DataSet继承,创建强类型DataSet,用于将表、行和列作为强类型对象属性公开。当设计应用程序时,要考虑应用程序所需功能的等级,以确定使
用DataSet或者是DataReader。要通过应用程序执行以下操作,就要使用DataSet:
l       在结果的多个离散表之间进行导航。
l       操作来自多个数据源(例如,来自多个数据库、一个XML文件和一个电子表格的混合数据)的数据。
l       在各层之间交换数据或使用XML Web服务。与DataReader不同的是,DataSet能传递给远程客户端。
l       重用同样的记录集合,以便通过缓存获得性能改善(例如排序、搜索或筛选数据)。
l       每条记录都需要执行大量处理。对使用DataReader返回的每一行进行扩展处理会延长服务于DataReader的连接的必要时间,这影响了性能。
l       使用XML操作对数据进行操作,例如可扩展样式表语言转换(XSLT转换)或XPath查询。
对于下列情况,要在应用程序中使用DataReader:
l       不需要缓存数据。
l       要处理的结果集太大,内存中放不下。
l       一旦需要以仅向前、只读方式快速访问数据。
注:
填充DataSet时,DataAdapter使用DataReader。因此,使用DataAdapter取代DataSet提升的性能表现为节省了
DataSet占用内存和填充DataSet需要的循环。一般来说,此性能提升只是象征性的,因此,设计决策应以所需功能为基础。
大型项目中,DataReader几乎是首选,DataSet难觅踪影。

SqlDataReader和SqlDataAdapter的更多相关文章

  1. SqlDataReader、SqlDataAdapter與SqlCommand的 区别

    1.SqlDataReader,在线应用,需要conn.open(),使用完之后要关闭. SqlConnection conn = new SqlConnection(connStr); //conn ...

  2. C#中ExecuteReader、ExecuteNonQuery、ExecuteScalar、SqlDataReader、SqlDataAdapter应该怎么用?

    C#中ExecuteReader.ExecuteNonQuery.ExecuteScalar.SqlDataReader.SqlDataAdapter应该怎么用? (2013-10-16 13:21: ...

  3. 使用SqlDataReader和SqlDataAdapter的注意

    1.当SqlDataReader没有关闭之前,数据库连接会一直保持open状态,所以在使用SqlDataReader时,使用完毕应该马上调用SqlDataReader.Close()关闭它. 2.一个 ...

  4. C#中ExecuteReader、ExecuteNonQuery、ExecuteScalar、SqlDataReader、SqlDataAdapter的区别

    ExecuteNonQuery()执行命令对象的SQL语句,返回一个int 类型的变量,返回数据库操作之后影响的行数.适合用来验证对数据库进行增删改的情况. 2.ExecuteScalar()也可以执 ...

  5. 关于SqlDataReader使用的一点疑惑

    C#中的SqlDataReader类(System.Data.SqlClient)是用来在保持打开数据库连接的状态下取数据用的 用法如下图: “保持与数据库的连接”这个特性也是SqlDataReade ...

  6. 如何从SqlDataReader中获取DataRow

    1.前言使用SqlDataReader较之SqlDataAdapter速度上快,因为读取记录是一行一行的来,但是往往也感觉那么蹩脚.例如经常用到的如何从SqlDataReader中获取DataRow呢 ...

  7. 黑马程序员_ADO.Net(ExecuteReader,Sql注入与参数添加,DataSet,总结DataSet与SqlDataReader )

    转自https://blog.csdn.net/u010796875/article/details/17386131 一.执行有多行结果集的用ExecuteReader SqlDateReader  ...

  8. 如何取消 SqlDataAdapter.Fill() 的执行(转载)

    问 Scenario: We have a DataGridView which is attached to DataAdapter (datatable), we load the data in ...

  9. CYQ.Data V5 从入门到放弃ORM系列:框架的优势

    前言: 框架开源后,学习使用的人越来越多了,所以我也更加积极的用代码回应了. 在框架完成了:数据库读写分离功能 和 分布式缓存功能 后: 经过三天三夜的不眠不休,终于完成框架第三个重量级的功能:自动化 ...

随机推荐

  1. 未能加载文件或程序集“System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。系统找不到指定的文件

    ASP.NET 运行时错误:针对类型System.Web.Mvc.PreApplicationStartCode的应用程序邓启动初始化方法Start 引发了异常,显示下列错误消息: 未能加载文件或程序 ...

  2. Combinations

    Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. For exampl ...

  3. ssh登录 The authenticity of host 192.168.0.xxx can't be established. 的问题

    scp免密码登录:Linux基础 - scp免密码登陆进行远程文件同步 执行scp一直是OK的,某天在本地生成了公钥私钥后,scp到某个IP报以下错误 The authenticity of host ...

  4. C#文件帮助类FoderHelper

    using System; using System.Data; using System.Configuration; using System.Linq; using System.Web; us ...

  5. @RenderSection,@RenderPage,@RenderBody介绍

    在MVC的模板页中会用到上面三个东西,那么今天就简单归纳下各有什么作用 1.@RenderSection 用法 对CSS或JS部分模块的预留定义 例如模板页定义了@RenderSection(&quo ...

  6. C语言共用体、大小端、枚举

    1.共用体和结构体的相同和不同 (1)相同点就是操作语法几乎相同.(2)不同点是本质上的不同.struct是多个独立元素(内存空间)打包在一起:union是一个元素(内存空间)的多种不同解析方式. # ...

  7. AngularJS的基础元素应用

    <!doctype html> <!-- 标记ng-app告诉AngularJS处理整个HTML页并引导应用 --> <html ng-app> <head& ...

  8. background-size

    语法: background-size:length|percentage|cover|contain length:设置背景图像的宽度和高度, 第一个值为宽度,第二个值为高度. 如果只设置一个值,则 ...

  9. 【hrbust2293】棋盘村

    题意 哈理工2016级新生程序设计全国邀请赛A题 http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&probl ...

  10. Centos7 下面安装 MySql 客户端

    Workench 是官发发布的Mysql客户端,是Linux下面比较通用的了, 如果使用X界面,可以试着熟悉下. 下载链接: http://cdn.mysql.com//Downloads/MySQL ...