详细说明asp.net中datareader 和 dataset 的区别_实用技巧

1. 获取数据的方式
    DataReader为在线操作数据, DataReader会一直占用SqlConnection连接,在其获得数据过程中其它操作不可以再使用SqlConnection连接对象。

复制代码 代码如下:

while(datareader.read())
{
..............
}
dataview.datasource=datareader;
dataview.databind();

DataSet为离线操作数据,DataSet会将数据一次性读入内存,然后断开连接,这时其它操作就可以使用SqlConnection连接对象。
后台代码

复制代码 代码如下:

public string test = "";
    protected void Page_Load(object sender, EventArgs e)
    {
        DataSet ds=new DataSet();//这里是你的数据,我就不写了
        test = "<table>";
        for (int i = 0; i < ds.Tables[0].Rows; i++)
        {
            test+="<tr><td>"+ds.Tables[0].Rows[i]["你要的字段"].ToString()+"</td></tr>"
        }
        test+="</table>";
    }

页面代码

复制代码 代码如下:

<form id="form1" runat="server">
    <%=test %>
    </form>

    由于DataReader一次只读取一行数据,所以占用内存较小。但DataReader为只进且只读的,也就是只能单方向向前读取,如果你想回头去读取上一条数据是不允许的,并且不允许其修改数据。
    由于DataSet一次性读取所有数据,所以比较消耗资源,但也提高了灵活性,在断开数据库连接情况下你可以对数据进行任何增删改查,按照任意的顺序读取数据,并可以将其写回到数据库。
    有一点需要注意,DataReader一次读取一行并不意味了着这时在数据库中的数据被修改,可以读到新的数据,这是数据库层面的保护.
2.获取数据的机制
    DataReader是通过IDbCommand.ExecuteReader来读取数据。
    DataSet则是通过DbDataAdapter.Fill来填充数据
    所以DataReader在获取数据时不能关闭连接。而DataSet则可以,因为DbDataAdapter已经将数据读取到应用程序服务器中,所以在使用DataReader时一定要注意,及时关闭连接。
3.其它区别
    DataReader读取速度快于DataSet
    DataReader是数据提供者类,DataSet是一般性类,借助于DbDataAdapter来填充数据。
    因为DataSet是离线操作数据,所以在事务中使用锁时要注意,因为DataSet填充数据后会断开连接,也就会释放锁。
4.使用DataReader可以提高执行效率,有两种方式可以提高代码的性能:一种是基于序号的查找,一个是使用适当的Get方法来查找。因为查询出来的结果一般都不会改变,除非再次改动查询语句,因此可以通过定位列的位置来查找记录。用这种方法有一个问题,就是可能知道一列的名称而不知道其所在的位置,这个问题的解决方案是通过调用DataReader 对象的GetOrdinal()方法,此方法接收一个列名并返回此列名所在的列号。例:

复制代码 代码如下:

int id = reader.GetOrdinal("CategoryName");
while (reader.Read())
{
  Response.Write(reader.GetInt32(0).ToString() + " " + reader.GetString(1).ToString() + "<br />");
  reader.Close();
}

  DataReader的GetInt32()和GetString()通过接收一个列号来返回一个列的值,这两种是最常用的,其中还有很多其它的类型。
  (注:DataReader对象在调用Close()方法即关闭与数据库的连接,如果在没有关闭之前又重新打开第二个连接,则会产生一条异常信息)

时间: 2024-12-09 06:54:26

详细说明asp.net中datareader 和 dataset 的区别_实用技巧的相关文章

ASP.NET中repeater控件用法实例_实用技巧

本文实例讲述了ASP.NET中repeater控件用法.分享给大家供大家参考.具体实现方法如下: repeater绑定数据: 复制代码 代码如下: protected void Page_Load(object sender, EventArgs e) {         if(!IsPostBack)             BindStudent(); } private void BindStudent() {         string str = ConfigurationManag

Asp.net中使用Sqlite数据库的方法_实用技巧

实际运用中当我用SqliteAdmin以及SQLite Expert Professional 2软件新建Sqlite数据库的时候在ASP.NET中是无法运用的,老是报错:文件不是一个合法的数据库.后来采用一种方法,就是直接在ASP.NET里面利用引用入的DLL新建数据库就可以用了. string datasource = "d:\\test.db"; //数据库文件的地址 System.Data.SQLite.SQLiteConnection.CreateFile(datasourc

asp.net中javascript与后台c#交互_实用技巧

最近做一个小项目,网页中嵌入google maps,输入经纬度坐标可以定位地图位置并加注标记,点击标记获取远端摄像头数据并在视频窗口实现播放.在实际操作过程中,由于经纬度数据和视频登录的用户名密码数据均要从后台数据库中提取,而第三版的google maps api又是在javascript中实现的,因此不可避免的需要前端脚本与后台进行交互.由于是在asp.net中实现,故问题演化成asp.net中javascript与后台c#如何进行交互. C#代码与javaScript函数的相互调用主要有四个

ASP.net中网站访问量统计方法代码_实用技巧

一.建立一个数据表IPStat用于存放用户信息 我在IPStat表中存放的用户信息只包括登录用户的IP(IP_Address),IP来源(IP_Src)和登录时间(IP_DateTime),些表的信息本人只保存一天的信息,如果要统计每个月的信息则要保存一个月.因为我不太懂对数据日志的操作,所以创建此表,所以说我笨吧,哈哈. 二.在Global.asax中获取用户信息 在Global.asax的Session_Start即新会话启用时获取有关的信息,同时在这里实现在线人数.访问总人数的增量统计,代

解决ASP.NET中的各种乱码问题总结_实用技巧

经常发现有人被乱码困扰着,而我感觉比较幸运,很少为此烦恼过. 在这篇博客中,我将把我想到的一些与乱码有关的经验总结出来,供大家参考. 页面显示乱码问题 在一个网站中,有些页面会正常显示,然而,有些页面会显示成乱码. 如果发生这种情况,可以检查一下web.config和文件编码. 如果web.config是这样配置的: <globalization fileEncoding="utf-8" /> 而文件的编码不是UTF-8: 那么就会有乱码问题. 注意:反之是不是会出现乱码的

ASP.NET中Web API的简单实例_实用技巧

一.Web API的路由 1.在Visual Studio中新建MVC4项目,在App_Start目录下有一个WebApiConfig.cs文件,这个文件中就是相应的Web API的路由配置了. 2.Web API 框架默认是基于 Restful 架构模式的,与ASP.NET MVC 有区别的是,它会根据 Http 请求的 HttpMethod(Get.Post.Put.Delete)来在Controller 中查找 Action,规则是:Action 名中是否以Get.Post 开头?Acti

asp.net5中用户认证与授权(2)_实用技巧

上篇文章给大家介绍了asp.net5中用户认证与授权(1),基础建立好了,紧接着就要创建对基础类进行操作的类,也就是实现基础类的增删改查当然,为了使用asp.net5的认证机制,这些都是通过特定的接口来实现的. 比如,对于角色来说,角色管理要实现的接口如下: public interface IQueryableRoleStore<TRole> : IRoleStore<TRole>, IDisposable where TRole : class { IQueryable<

ASP.NET中母版页和shtml实例入门_实用技巧

本文较为深入浅出的分析了ASP.NET中母版页和shtml.分享给大家供大家参考.具体分析如下: 母版页 创建和使用母版页: 1. 创建Webform的母版页(MasterPage) 2. 创建使用母版页的窗体(ContentPage). 3. 母版页使用ContentPlaceHolder挖坑,"使用母版页的窗体"用Content填坑 母版页是服务器帮我们将页面拼接response给浏览器的. 但是,母版页太笨重.推荐使用shtml. shtml ServerSideInclude(

ASP.NET中实现获取调用方法名_实用技巧

本文实例讲述了ASP.NET中实现获取调用方法名的技巧.分享给大家供大家参考.具体实现方法如下: 在写记录日志功能时,需要记录日志调用方所在的模块名.命名空间名.类名以及方法名,想到使用的是反射(涉及到反射请注意性能),但具体是哪一块儿还不了解,于是搜索,整理如下:   需要添加相应的命名空间: 复制代码 代码如下: using System; using System.Diagnostics; using System.Reflection; 如果仅是获取当前方法名,可以使用如下代码: 复制代