遍历数据阅读器中的记录

当ExecuteReader方法返回DataReader对象时,当前光标的位置在第一条记录的前面。

必须调用阅读器的Read方法把光标移动到第一条记录,然后,第一条记录将变成当前记录。

如果数据阅读器所包含的记录不止一条,Read方法就返回一个Boolean值true。

想要移到下一条记录,需要再次调用Read方法。重复上述过程,直到最后一条记录,那时Read方法将返回false。

经常使用while循环来遍历记录:

while(reader.Read())

{

//读取数据

}

只要Read方法返回的值为true,就可以访问当前记录中包含的字段。

访问字段中的值

ADO.NET提供了两种方法访问记录中的字段。

第一种是Item属性,此属性返回由字段索引或字段名指定的字段值。

第二种方法是Get方法,此方法返回由字段索引指定字段的值。

DataReader类有一个索引符,可以使用常见的数组语法访问任何字段。

使用这种方法,既可以通过指定数据列的名称,也可以通过指定数据列的编号来访问特定列的值。

第一列的编号是0,第二列编号是1,依次类推。例如:

Object value1=myDataReader["学号"];

Object value1=myDataReader[0];

Item属性

每一个DataReader类都定义了一个Item属性,此属性返回一个代码字段属性的对象。

Item属性是DataReader类的索引。

需要注意的是Item属性总是基于0开始编号的:

object FieldValue=reader[FieldName];

object FieldValue=reader[FieldIndexl;

可以把包含字段名的字符串传入Item属性,也可以把指定字段索引的32位整数传递给Item属性。

例如,如果命令是SQL select查询:

Select ID, cName  from course

使用下面任意一种方法,都可以得到两个被返回字段的值:

object ID=reader ["ID"]

object cName=reader ["cName"];

或者:

object ID=reader[0];

object cName=reader [1];

另外需要注意的是,在使用数据时需要自己负责类型转换,如下所示:

int ID=(int)reader[0];

String cName=(string)reader[1];

注意:如果类型转换错误,例如将非数字类型转化为整型,将会在运行时抛出异常。

Get方法

除了通过索引访问数据外,DataReader类还有一组类型安全的访问方法可以用于读取指定列的值。

这些方法是以Get开头的,并且它们的名称具有自我解释性。

例如GetInt32()、GetString()等。

这些方法都带有一个整数型参数,用于指定要读取列的编号。

每一个DataReader类都定义了一组Get方法,那些方法将返回适当类型的值。

例如,GetInt32方法把返回的字段值作为32位整数。

每一个Get方法都接受字段的索引,

例如在上面的例子中,使用以下的代码可以检索ID字段和cName字段的值:

int ID=reader. Getint32 (0);

string cName=reader. GetString(1);

实例演示DataReader

在这个例子中,将读取所有的学生信息并将其显示出来。

(1)启动Visual Studio,新建一个名为DataReaderTest的WindowsApplication项目。

(2)在Forml.cs的空白处双击鼠标,进入Page—Load事件。Page_Load事件在页面加载时执行。

(3)首先在Forml.cs中添加SqlClient的命名空间:

using System. Data. SqlClient;

(4)在Page_Load事件中添加如下代码:

using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace DataReaderTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//定义输出消息
string message="";
//新建连接对象
SqlConnection conn=new SqlConnection();
conn.ConnectionString="Data Source=(local);Initial Catalog=Student;Integrated Security=SSPI";
//拼接命令字符串
string selectQuery="select ID, sName,sGrade,sSex from studentInfo";
//新建命令对象
SqlCommand cmd=new SqlCommand(selectQuery, conn);
conn.Open( );
//关闭阅读器时将自动关闭数据库连接
SqlDataReader reader=cmd. ExecuteReader(CommandBehavior.CloseConnection);
//循环读取信息
while (reader.Read())
{
message+="学号:"+reader[].ToString()+" ";
message+="姓名:"+reader["sName"].ToString()+" ";
message+="班级:"+reader.GetString()+ " ";
message+="性别:"+reader.GetString()+" ";
message+="\n";
}
//关闭数据阅读器
//无需关闭连接,它将自动被关闭
reader.Close();
//测试数据连接是否已经关闭
if(conn.State==ConnectionState.Closed)
{
message+="数据连接已经关闭\n";
}
MessageBox.Show(message);
}
}
}

C#与数据库访问技术总结(十二)数据阅读器(DataReader)2的更多相关文章

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

    数据阅读器 当执行返回结果集的命令时,需要一个方法从结果集中提取数据. 处理结果集的方法有两个: 第一,使用数据阅读器(DataReader): 第二,同时使用数据适配器(Data Adapter)和 ...

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

    ADO.NET 代码综合示例 前面已经介绍过OLE DB.NET和SQL Server.NET数据提供者可以用来连接不同的数据源. 以下代码不仅综合演示了使用ADO.NET的这两种数据提供者访问数据库 ...

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

    数据库访问技术 ado.net 将数据库中的数据,提取到内存中,展示给用户看还可以将内存中的数据写入数据库中去 并不是唯一的数据库访问技术,但是它是最底层的数据库访问技术 1.创建数据库,并设置主外键 ...

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

    Command对象的常用方法 说明:上篇总结了Command对象的几个数据成员,这节总结Command对象的常用方法. 同样,在不同的数据提供者的内部,Command对象的名称是不同的,在SQL Se ...

  5. c# 窗体开发4 数据库访问技术

    ADO.NET的名称起源于ADO(ACTIVEX DATA OBJECTS) USING SYSTEM; USING SYSTEM.COLLECTIONS.GENERIC; USING SYSTEM. ...

  6. 数据库访问技术 odbc dao rdo uda jet oledb

    一.UDA(UniversalDataAccess) 这是微软提供的通用数据访问策略.包括ADO.OLEDB和ODBC.它不光提供了数据库的访 问能力,对于其它的数据存储技术也同样支持,如目录服务.E ...

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

    DataReader对象与数据获取 DataReader对象以“基于连接”的方式来访问数据库. 也就是说,在访问数据库.执行SQL操作时,DataReader要求一直连在数据库上. 这将会给数据库的连 ...

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

    综合示例 说明:前面介绍了那么多,光说不练假把式,还是做个实例吧. 表:首先你要准备一张表,这个自己准备吧.我们以学生表为例. 1.ExecuteScalar方法 ExecuteScalar方法执行返 ...

  9. 深入了解java虚拟机(JVM) 第十二章 类加载器

    一.什么是类加载器 类加载器是一个用来加载类文件的类,Java源代码通过javac编译器编译成类文件,然后JVM来执行类文件中的字节码来执行程序.需要注意的是,只有被同一个类加载器加载的类才可能会相等 ...

随机推荐

  1. jquery 根据年 月设置报表表头

    function setTblHeadr(thisTime){ $("#datatable_ajax1 thead").empty(); //获取星期 var weekday=ne ...

  2. 通过反射向将EF的实体映射配置加入到实体模型中

    public AdminDbContext() : base("MemberDbContext") { //不使用代理创建导航属性,避免WCF序列化错误 Configuration ...

  3. blob storage第一次亲密接触

    由于azure上各个云服务都是分开的,所以当一个地方生成文件后,我在别的地方想要读取他就变得困难,不过azure上面有解决方案,就是azure blob storage. 在现有的订阅账号下,新建一个 ...

  4. php SPL常用接口

    在PHP中有好几个预定义的接口,比较常用的四个接口(Countable.ArrayAccess.Iterator.IteratorAggregate(聚合式aggregate迭代器Iterator)) ...

  5. js 去掉字符串前后空格

    //去左空格; function ltrim(s){ return s.replace(/(^\s*)/g, ""); } //去右空格; function rtrim(s){ r ...

  6. AngularJs自定义指令详解(1) - restrict

    下面所有例子都使用angular-1.3.16.下载地址:http://cdn.bootcss.com/angular.js/1.3.16/angular.min.js 既然AngularJs快要发布 ...

  7. 一个有趣的基于C++的模拟发牌程序

    在内存中模拟出一副牌,然后模拟洗牌,发牌等动作. 流程是这样的:构建一副牌保存到一个数组中—洗牌—创建玩家—向玩家发牌–输出每个玩家的牌. #include <stdio.h> #incl ...

  8. 团队项目作业:利用NABCD模型进行竞争性需求分析

    NABC正是这样的一套框架,当你试图提出一项崭新的提案之际,它能够提供四个思维基点,令你的商业策划具备天马行空的基础. 具体来说,NABC是四个关键词的首字母缩写- Need(需求)-现在市场上未被满 ...

  9. Daily Scrum 12.3

    今日完成任务: 与安卓组进行商量对数据库修改的方案.现在在等他们最终确认,确认之后进行整理以及源代码的调试. 对资源功能的代码进行阅读. 遇到困难: 关于整合,爬虫组爬到的内容和网站定位有所不符,所以 ...

  10. 9x25 串口映射

    duart       /dev/ttyS0            /dev/ttyS0 usart1    /dev/ttyS2 /dev/ttyS1 usart2    /dev/ttyS3    ...