详细说明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()方法即关闭与数据库的连接,如果在没有关闭之前又重新打开第二个连接,则会产生一条异常信息)

(0)

相关推荐

  • asp.net下DataSet.WriteXml(String)与(Stream)的区别

    DataSet.WriteXml(String)生成的Xml文件中包含XML 声明, 而DataSet.WriteXml(Stream)却不会写入Xml声明即<?xml version="1.0" standalone="yes"?> 详细情况: 在写博客园的数据备份程序时,本来想通过ds.WriteXml(Response.OutputStream)直接将Xml数据发送到客户端,可是这样在客户端得到的Xml文件中的所有中文全是乱码,乱码的Xml文件与正

  • ASP.NET中DataTable与DataSet之间的转换示例

    DataSet包含了多个DataTable,以及DataTable之间的约束关系. 如果你的数据不需要做关系映射,直接用DataTable效率比较高.如果有需要1:N或N:M这样的关系查询,将DataSet中的相应DataTable全部填充,再使用关系查询数据. DataSet数据源你可以把它看成数据库,而DataTable就是数据库里的一个表 将DataTable添加到DataSet中: 在项目中遇到DataTable 无法直接转换成DataSet 时, 可以先new 可以先new DataS

  • ASP.NET 绑定DataSet中的多个表

    这个问题,平时很少看到,一般在数据绑定之前,数据都是放在一个表中的,实际上,如果表之间存在关系,绑定多个表也是可以的.下面就是 DataSet中两个表进行绑定的例子. 复制代码 代码如下: <%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtm

  • .NET中如何将文本文件的内容存储到DataSet

    前言 项目中对文本文件的操作比较简单,但是如果需要将文本文件的内容写入系统的缓存中,操作起来,会稍微的繁琐一些.现在总结一个较为通用的方法,将文本文件的内容缓存进入DataSet数据集中.下面话不多说了,我们直接来看示例代码吧. 示例代码 private DataSet _iifSet; /// <summary> /// 将文本文件转化为DataSet /// </summary> /// <param name="filePath"></p

  • asp.net如何将DataSet转换成josn并输出

    public class JsonUtil { public string ToJson(DataSet dataSet) { string jsonString = "{"; foreach (DataTable table in dataSet.Tables) { jsonString += """" + table.TableName + """:" + ToJson(table) + ",

  • asp.net DataSet进行排序

    DataSet ds=new DataSet(); DataView dv=new DataView(); dv.Table=ds.Tables[0]; dv.Sort="CreateTime desc"; GridView.DataSource=dv; 就可以实现对dataset的排序了.

  • asp.net下用DataSet生成XML的问题

    格式限定符中往往有一些字母代表特点的意思 比如,在DateTime.ToString中,y代码年,M代表月,等等 那么如果ToString的结果我本身就需要这些字符又怎么办呢? 此时就需要使用转义字符,而且这个转义标记就是我们熟悉的"\" DateTime now = DateTime.Now; now.ToString("yyyy,MM,dd HH:mm:ffff");//2006,07,06 14:51:3425 now.ToString(@"\yea

  • ASP.NET用DataSet导出到Excel的方法

    复制代码 代码如下: /读取临时文件 GYYW.DA.Common.Base_SqlDataBase daBZDM = new GYYW.DA.Common.Base_SqlDataBase(); DataSet dsBZDM = daBZDM.GetDataSetBySql("select QCDM,MC,GG from WG_BZDM where QCDM like '02%'"); //同时将虚拟目录下的Data作为临时文件目录. string urlPath = HttpCon

  • ADO.Net 类型化DataSet的简单介绍

    一.弱类型DataSet的缺点:1.只能通过列名引用,dataset.Tables[0].Rows[0]["Age"],如果写错了列名编译时不会发现错误,因此开发时必须要记着列名.2.int age=Convert.ToInt32(dataset.Rows[0]["Age"]),取到的字段的值是object类型,必须小心翼翼的进行类型转换,不仅麻烦,而且容易出错.3.将DataSet传递给其他使用者,使用者很难识别出有哪些列可以供使用.4.运行时才能知道所有列名,数

  • ASP.NET中实现把Json数据转换为ADO.NET DataSet对象

    Json数据转换为ADO.NET DataSet其实方法有很多,Newtonsoft.Json也提供了DataSet的Converter用以转换Json数据.但是有些情况下DataSet Converter并不管用,而且也不一定能够满足项目需要.这里介绍另一种简单有效的方法,能够方便快速地将Json数据转为ADO.NET DataSet. 设计 事实上Newtonsoft.Json已经提供了一套完整的Json数据文档结构,Newtonsoft.Json.Linq命名空间下提供了这种文档结构的对象

随机推荐