首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

请问一下 ado.net中 datareader 和 dataset的区别 说的通俗一点

2012-02-04 
请教一下 ado.net中 datareader 和 dataset的区别说的通俗一点请教一下 ado.net中 datareader 和 dataset

请教一下 ado.net中 datareader 和 dataset的区别 说的通俗一点
请教一下 ado.net中 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 一次性取出全部数据加载在内存中
[解决办法]
up 1 floor
[解决办法]
up楼上~
[解决办法]

探讨
DataReader和DataSet最大的区别在于,DataReader使用时始终占用SqlConnection,在线操作数据库..任何对SqlConnection的操作都会引发DataReader的异常..因为DataReader每次只在内存中加载一条数据,所以占用的内存是很小的..因为DataReader的特殊性和高性能.所以DataReader是只进的..你读了第一条后就不能再去读取第一条了..
DataSet则是将数据一次性加载在内存中.抛弃数据库连接..读取完毕即放弃数据库连接..因为DataSet将数…

[解决办法]
dataset 取出来的是一个内存的虚拟表 

datareader 是一条一条的取记录 ..........
[解决办法]
dataset 取出来的是一个内存的虚拟表 

datareader 是一条一条的取记录 ..........
[解决办法]
dataset是把数据读到内存里,以后要操作dataset都是内存里的数据了,因此不需要与数据库保持连接
datareader则是一个读取器,必须在保证与数据库中连接着的前提下,才能读取到数据,它读的是数据库中的数据
[解决办法]
使用DataReader与DataSet都可以从数据源读取数据。DataReader本身是通过IDbCommand.ExecuteReader()方法进行构建的;而DataSet则是通过DbDataAdapter.Fill()方法进行填充。此外,两者的工作方式有明显的不同:DataReader的执行过程不能脱离数据库连接,也就是在DataReader读取数据的时候不能够使用IDbConnection.Close()方法关闭数据库连接;而在使用DataSet获取数据时,可以断开数据库的连接,因为此时DbDataAdapter已经负责将数据获取到应用服务器中了。
http://www.cnblogs.com/dongqi/articles/1280819.html
[解决办法]
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获取数据后,应该主动地关闭数据库连接,否则可能出现数据库连接池溢出的异常。
[解决办法]
上面说的都在理,我补充一下我的看法。我最近做了一个网站,在用到一个分页控件的时候只能使用dataset,因为dataset中。
public void bindGrid()
{
AspNetPager1.PageSize=10;
AspNetPager1.RecordCount = recoun();
SqlDataAdapter ter = new SqlDataAdapter( "select * from T_UB_student ", getConn());


DataSet se = new DataSet();
ter.Fill(se, (AspNetPager1.CurrentPageIndex - 1) * AspNetPager1.PageSize, AspNetPager1.PageSize, "table ");
GridView1.DataSource = se.Tables[ "table "];
GridView1.DataBind();
AspNetPager1.CustomInfoHTML = "记录总数: " + AspNetPager1.RecordCount.ToString();
AspNetPager1.CustomInfoHTML += " 总页数: " + AspNetPager1.PageCount.ToString();
AspNetPager1.CustomInfoHTML += " 当前页: <font color=\ "red\ "> <b> " + AspNetPager1.CurrentPageIndex.ToString() + " </b> </font> ";

}
这个控件只能使用DataSet作为数据源,DataReader就不行了。

热点排行