C#与数据库访问技术总结(十一)之数据阅读器(DataReader)1

数据阅读器

当执行返回结果集的命令时,需要一个方法从结果集中提取数据。

处理结果集的方法有两个:

第一,使用数据阅读器(DataReader):

第二,同时使用数据适配器(Data Adapter)和ADO.NET数据集(DataSet)。

本节将学习数据阅读器的有关知识。

DataReader

在ADO.NET中由每个数据提供程序实现自己的DataReader。

数据读取器(DataReader)是从一个数据源中选择某些数据的最简单的方法,但也是功能较弱的一个方法。

DataReader类没有构造函数,所以不能直接实例化它,需要从Command对象中返回一个DataReader实例,具体做法是通过调用它们的ExecuteReader方法。

1. 创建DataReader对象

在ADO.NET中从来不会显式地使用DataReader对象的构造函数创建DataReader对象。

事实上,DataReader类没有提供公有的构造函数。

人们通常调用Command类的ExecuteReader方法,这个方法将返回一个DataReader对象。

下面的代码阐明了如何创建SqlDataReader对象:

下面代码的功能是从表student中读取数据,并将数据列学号和姓名的所有数据输出到控制台:

String cnstr="server=(local); database=Student; Integrated Security=true";
SqlConnection cn=new SqlConnection(cnstr);
cn.Open();
string sqlstr=" select * from student";
SqlCommand cmd=new  SqlCommand(sqlstr, cn);
SqlDataReader dr=cmd.ExecuteReader( );
while(dr.Read())
{
    String  id=dr["学号"].ToString();
    String  name=dr["姓名"].ToString();
    Console.WriteLine("学号:{0}   姓名:{1}", id, name);
}
dr.Close();
cn.Close();

 DataReader类最常见的用法就是检索SQL查询或存储过程返回记录。

另外DataReader  是一个连接的、只向前的和只读的结果集。

也就是说,当使用数据阅读器时,必须保持连接处于打开状态。

除此之外,可以从头到尾遍历记录集,而且也只能以这样的次序遍历,即只能沿着一个方向向前的方式遍历所有的记录,并且在此过程中数据库连接要一直保持打开状态,否则将不能通过DataReader读取数据。

这就意味着,不能在某条记录处停下来向回移动。

记录是只读的,因此数据阅读器类不提供任何修改数据库记录的方法。

注意:

数据阅读器使用底层的连接,连接是它专有的。

当数据阅读器打开时,不能使用对应的连接对象执行其他任何任务,例如执行另外的命令等。

当阅读完数据阅读器的记录或不再需要数据阅读器时,应该立刻关闭数据阅读器。

在完成数据读取后,需要调用Close()方法关闭DataReader对象。

如果创建DataReader对象时,使用的是ExecuteReader方法的另一个重载,代码如下:

SqlDataReader  myDataReader=cmd.ExecuteReader(CommandBehavior.CloseConnection);

则关闭DataReader对象时会自动关闭底层连接,不再需要显示调用Connection对象的Close()方法关闭它。

Command对象的Execute方法有一个重载版本,那个重载版本接受命令行为参数。

虽然命令文本指定返回结果集的查询,但是通过执行命令行为,可以提供一些关于想要怎么样使用结果的指令。

ADO.NET在System.Dara命名空间中定义了CommandBehavior枚举,其值和具体意义如表所示。


成员名称


说明


CloseConnection


在执行该命令时,如果关闭关联的DataReader对象,则关联的Connection对象也将关闭


Default


此查询可能返回多个结果集。

执行查询可能会影响数据库状态。

Default不设置CommandBehavior标志,因此调用ExecuteReader(CommandBehavior.Default)在功能上等效于调用ExecuteReader()


KeyInfo


此查询返回列和主键信息。

执行此查询时不锁定选定的行。

注意:当使用KeyInfo时,用于SQL Server的.NET Framework数据提供程序将FOR BROWSE子句追加到正在执行的语句。

用户应该注意潜在的副作用,例如对SET FMTONLY ON语句的使用产生的干扰


SchemaOnly


此查询只返回列信息,而不影响数据库状态


SequentialAccess


提供一种方法,以便DataReader处理包含带有二进制值的列的行。

SequentialAccess不是加载整行,而是使DataReader将数据作为流来加载。

然后可以使用GetBytes或GetChars方法来指定开始读取操作的字节位置以及正在返回的数据的有限的缓冲区大小。

当指定SequentialAccess时,尽管无需读取每个列,但是需要按照列的返回顺序读取它们。

一旦已经读过返回的数据流中某个位置的内容,就不能再从DataReader中读取该位置或该位置之前的数据。

当使用OleDbDataReader时,可重新读取当前列的值,直到读过它。当使用SqlDataReader时,一次只能读取一个列值


SingleResult


查询返回一个结果集


SingleRow


查询应返回一行。

执行查询可能会影响数据库状态。

一些.NET Framework数据 提供程序可能(但不要求)使用此信息来优化命令的性能。

在用OleDbCommand对象的ExecuteReader方法指定SingleRow时,用于OLEDB的.NET Framework数据提供程序使用OLE DB IRow接口(如果可用)执行绑定。否则,它使用,IRowset接口。

如果您的SQL语句应该只返回一行,则指定SingleRow还可以提高应用程序性能。

在执行返回多个结果集的查询时,可以指定SingleRow。在这种情况下,仍返回多个结果集,但每个结果集只有一行。

时间: 2024-11-08 17:41:14

C#与数据库访问技术总结(十一)之数据阅读器(DataReader)1的相关文章

ADO.NET数据库访问技术

ADO.net:数据库访问技术程序操作的数据都是变量或对象,这些东西都存在于内存中但是有很多的数据是存在数据库中的,数据库中的数据存在于硬盘上 作用:将数据库中的数据取到内存中来,可以让程序进行操作 将内存中的数据,写入到数据库中 1.using System.Data.SqlClient; //引用命名空间 2.建立 数据库连接类 string str = "server=.;database=Data0515;user=sa;pwd=123;";//连接字符串 SqlConnect

C#-数据库访问技术 ado.net——创建 数据库连接类 与 数据库操作方法 以及简单的数据的添加、删除、修改、查看

数据库访问技术 ado.net 将数据库中的数据,提取到内存中,展示给用户看还可以将内存中的数据写入数据库中去 并不是唯一的数据库访问技术,但是它是最底层的数据库访问技术 1.创建数据库,并设置主外键关系 2.创建新的C#项目,创建 数据库连接类 与 数据库操作方法 a.引用数据库 using System.Data.SqlClient;    b.创建数据库连接类:先进行编写连接字符串,在实例化连接类 c.创建数据库操作方法(此处不是实例化类)    d.打开数据库 → 执行操作 → 关闭数据

数据库访问技术之JDBC

在了解JDBC之前呢,我们可以先对ODBC做一个回顾,以便于更好的理解JDBC.看名字也知道这两个关系不一般,他们实现了同样的功能,为应用程序连接和操作数据库提供支持.所以,我们先从ODBC开始. ODBC ODBC(Open Database Connectivity)是开放数据库互连的简称,是一种使用SQL的应用程序接口.它是一系列的规范和对数据库访问的API.那么API+SQL就可以执行对数据库的操作.它是不依赖于DBMS的,即通过ODBC可以以相同的方式连接大部分数据库.它包括了应用程序

C#与数据库访问技术总结(十八)

ADO.NET 代码综合示例 前面已经介绍过OLE DB.NET和SQL Server.NET数据提供者可以用来连接不同的数据源. 以下代码不仅综合演示了使用ADO.NET的这两种数据提供者访问数据库的一般步骤,而且说明了使用不同种类的ADO.NET组件集合访问数据库的一般步骤. 可以通过代码进一步了解这两种数据提供者访问方式的异同之处. 使用OLE DB.NET  Provider OLE DB的数据提供者可以访问Access和SQL等数据库,代码如下: //设置连接字符串 string db

C#与数据库访问技术总结(五)之Command对象的常用方法

Command对象的常用方法 说明:上篇总结了Command对象的几个数据成员,这节总结Command对象的常用方法. 同样,在不同的数据提供者的内部,Command对象的名称是不同的,在SQL Server Data Provider里叫SqlCommand,而在OLE DB Data Provider里叫OleDbCommand. 下面将详细介绍Command类型对象的常用方法,包括构造函数.执行不带返回结果集的SQL语句方法.执行带返回结果集的SQL语句方法和使用查询结果填充DataRea

C#与数据库访问技术总结(十二)数据阅读器(DataReader)2

遍历数据阅读器中的记录 当ExecuteReader方法返回DataReader对象时,当前光标的位置在第一条记录的前面. 必须调用阅读器的Read方法把光标移动到第一条记录,然后,第一条记录将变成当前记录. 如果数据阅读器所包含的记录不止一条,Read方法就返回一个Boolean值true. 想要移到下一条记录,需要再次调用Read方法.重复上述过程,直到最后一条记录,那时Read方法将返回false. 经常使用while循环来遍历记录: while(reader.Read()) { //读取

ADO.NET(数据库访问技术)

[ADO.net结构]: ADO.NET用于访问和操作数据库的两个主要组件是:.NET Framework 数据提供程序和DataSet. a..NET Framework数据提供程序:是专门为数据操作设计的组件,用于处理不同的数据源,支持访问特定的数据库.执行SQL命令和检索结果. b..NET Framework数据提供程序包含4个核心对象:  Connection:(连接)建立与特定数据源的连接:   Command:(命令)对数据源执行命令:   DataReader:( 数据读取)从数

C#与数据库访问技术总结(七)综合示例

综合示例 说明:前面介绍了那么多,光说不练假把式,还是做个实例吧. 表:首先你要准备一张表,这个自己准备吧.我们以学生表为例. 1.ExecuteScalar方法 ExecuteScalar方法执行返回单个值的命令.例如,如果想获取Student数据库中表studentInfo的学生的总人数,则可以使用这个方法执行SQL查询: Select count(*) from studentInfo . (1) 建立Windows Application 应用程序 (2) 在Form1上添加一个按钮Bu

C#与数据库访问技术总结(十三)之DataReader对象

DataReader对象与数据获取 DataReader对象以“基于连接”的方式来访问数据库. 也就是说,在访问数据库.执行SQL操作时,DataReader要求一直连在数据库上. 这将会给数据库的连接负载带来一定的压力,但DataReader对象的工作方式将在很大程度上减轻这种压力.(感觉这不是前后矛盾了?) DataReader对象的常用属性 DataReader对象提供了用顺序的.只读的方式读取用Command对象获得的数据结果集. 由于DataReader只执行读操作,并且每次只在内存缓