Robin's Blog

记录 积累 学习 成长

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
DataSourceMode属性有两种选择:DataReader|DataSet,默认为DataSet方式。
如果单纯显示内容提定制值为DataReader效率会更高,需要分页、编辑功能则需要设置为DataSet方式。
分页时提到"内存分页"与"数据库分页"两种方式,使用存储过程属于后者,而使用"SqlDataSource"方式为“内存方式” SqlDataAdapter 也有分页功能,莫非SqlDataSource 就是调用的SqlDataAdapter?
在 ASP.NET 2.0 页面中的控件,若要展示数据库的数据,或要写入数据库时,我们可从 VS 2005 的「工具箱」中点选 DataSource 控件,用鼠标拖曳、轻松地建立数据库联机。但在 SqlDataSource 控件中,预设使用的联机方式,为具有「离线存取」功能的 DataSet 对象;但就如章老师讲的,不需要进行「排序、筛选与分页」时,根本没必要浪费内存,反而还牺牲了一些程序性能 (performance)。         因此,若您的 ASP.NET 页面使用了 SqlDataSource 作为控件的数据来源,应视需求,再手动调整 DataSourceMode 属性。若您的 SqlDataSource 只是当作 Label、DropDownList、ListBox、…等控件的数据绑定,纯粹用来「显示」数据,应如下图 1 所示,在 VS 2005 中,在 SqlDataSource 的「属性」窗口中,将 DataSourceMode 属性改为「DataReader」(预设为 DataSet)。此举不但可提升程序存取速度,亦可节省 server 上因 DataSet 造成非必要的内存消耗。但若您的 SqlDataSource,是用来当作 GridView 控件的数据来源,且 GridView 需要:分页、排序、筛选 (非指 T-SQL 语句的 WHERE 或 JOIN...ON,而是指 DataSet 中的 DataTable 对象、RowFilter 属性,对已从数据库中捞取出来的数据再进行筛选) 这些功能,即不用再手动调整 DataSourceMode 属性,直接使用默认的 DataSet 即可。

figure1

        图 1 将 SqlDataSource 的 DataSourceMode 属性,从默认的 DataSet 改成 DataReader

        在 ADO.NET 中,DataReader 可「单向 (顺向)、只读」地读取数据库中的数据,优点是读取速度快、不须耗用 server 额外的内存;DataSet 则是一种可让使用者「离线」存取数据的模式,数据都会暂存至内存中,有如可离线操作的数据库 (大家可以先猜看看,是存在 client-side 还是 server-side 的内存)。

posted on 2009-07-23 15:14  Robin99  阅读(549)  评论(0编辑  收藏  举报