您当前的位置:首页 > 生活 > 内容

datareader(datareader和dataset的区别)

本文目录

  • datareader和dataset的区别
  • DataReader的特点是什么
  • 如何用datareader读取数据
  • DataReader与DataSet有什么区别
  • 已有打开的与此命令相关联的 DataReader,必须首先将它关闭
  • DataReader和DataAdapter有什么区别
  • datareader和dataset的异同
  • 已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭
  • 我想用datareader,可是程序执行不了,总说执行不了,为什么

datareader和dataset的区别

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

DataReader的特点是什么

DataReader是一直保持数据库的连接,假如中间异常,则会中断, 是从数据源中一条一条的读取数据,整个过程都要与数据库保持连接, 而dataset是将数据一次性从数据库中读取出来保存在内存当中。

如何用datareader读取数据

1.创建数据库连接。2.创建sql命令并添加参数。3.执行sql命令,并用sqldatareader读取执行结果。4.新建list《》实体集。5.循环体,每从sqldatareader中读取一行数据,就实例化一个实体,并将读取到的那行数据的每个字段值添入对应的属性中去。最后将这个实体添加到实体集中。6.结束循环,返回list《》实体集。

DataReader与DataSet有什么区别

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

已有打开的与此命令相关联的 DataReader,必须首先将它关闭

主要原因是 DataReader 在打开使用时,一个 SqlConnection 只允许打开一个 DataReader,在开启另一个 DataReader 时,必须将前面一个先 Close 掉。 

1、首先输入代码:

private static string strConn = ConfigurationManager.ConnectionStrings[“SQLLSB2008“].ConnectionString;

    private static SqlConnection myConn = null;private static SqlDataAdapter myAdapter = new SqlDataAdapter();    private static SqlCommand myCmd = new SqlCommand();    private static DataTable myTable = new DataTable();

2、然后输入下方的代码:

public static DataTable returnDataTable(string mySql, SqlParameter parameters)

{myConn = new SqlConnection(strConn);

        using (myCmd = new SqlCommand(mySql, myConn)){

            try

            {myCmd.Parameters.AddRange(parameters);

                myAdapter = new SqlDataAdapter(myCmd);

                myTable.Clear();

                myAdapter.Fill(myTable);}

3、然后输入下方的代码,就可以解决问题了:

   catch

            {connClose();}

            finally

            {connClose();}}return myTable;}

DataReader和DataAdapter有什么区别

asp.net有这些知识,dataset,datatable,datareader,dataadapter.dataset是用来做连接sql的一种方法,意思是把数据库的副本存在应用程序里,应用程序开始运行时,把数据库相关数据保存到dataset.datatable表示内存中数据的一个表.常和defaultview使用获取可能包括筛选视图或游标位置的表的自定义视图。datareader对象是用来读取数据库的最简单方式,它只能读取,不能写入,并且是从头至尾往下读的,无法只读某条数据,但它占用内存小,速度快dataadapter对象是用来读取数据库.可读取写入数据,某条数据超着强,但它占用内存比datareader大,速度慢

datareader和dataset的异同

第一种解释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在大部分应用场景下也是有自己优点的,比如充分解耦、一次操作、领域模型操作等。所以要根据不同场景合理使用这两种对象。

已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭

DataReader 在打开使用时,一个 SqlConnection 只允许打开一个 DataReader,在开启另一个 DataReader 时,必须将前面一个先 Close 掉。

1、使用数据库更新或插入语句时,通常用 SqlCommand 的 ExecuteNonQuery() 方法,并且定义了一个公共的数据库连接,每次查询时都生成新连接不会有这个问题,但会占用高的数据库资源。

2、这种情况下,内部会生成一个空的 DataReader 对象,当前的数据库连接关闭掉后,该 DataReader 才会释放,因此在推荐使用 using 关键字,可以将它所定义范围内的对象都释放掉。

3、也可以设定ConnectionString,直接加上MultipleActiveResultSets=true语句,只适用于SQL 2005之后的版本,先读出放置在List中。

4、改为下图代码之后,ToList之后就被读到内存中了,与DataContext脱钩了。

我想用datareader,可是程序执行不了,总说执行不了,为什么

你打开了datareader,运行完了之后肯定要关闭datareader呀我估计是你还有其他的地方使用到了datareader,但是你用完之后并未关闭,所以这里是执行不了的。你找到你所有用datareader的地方,在程序的后面加上datareader.Close();就可以了。 If mydatareader.Read = True Then mycom.CommandText = “delete from papers where Sno=’“ + TextBox1.Text + “’“ mycom.ExecuteNonQuery() MsgBox(“删除成功!“)mydatareader.Close() Else MsgBox(“无此学生论文记录!“)mydatareader.Close() End If


声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,谢谢。

上一篇: 草莓的功效与作用禁忌,草莓的功效与作用禁忌和副作用(水果知识——草莓)

下一篇: 安卓应用商店app下载安装(安卓APP下载量排行榜哪些比较靠谱)



猜你感兴趣

推荐阅读

网站内容来自网络,如有侵权请联系我们,立即删除! | 软文发布 | 粤ICP备2021106084号