<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />4-2-4  DataReader对象<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

上一小节详细叙述DataAdapter对象的应用,这里需要思考一个问题:DataAdapter对象怎样来读取数据库的数据?如果应用程序想直接获得数据源的数据,又该怎样操作呢?
直接获得数据源的数据与DataAdapter对象读取数据库的数据是一样的机制:在客户端应用程序与数据源保持连接状态下使用DataReader对象获得数据。请参见图4-45所示:
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
图4-45 DataReader对象工作示意图
从图4-63中可以看出DataReader对象在数据传输过程中起到一个传送带的作用。它沿着一个方向,源源不断的将数据从数据库传送给客户端应用程序,客户端应用程序每次接到的是一条记录。

1.DataReader对象概述

DataReader对象提供一种方法,可以读取通过在数据源执行命令获得的结果集,并且是只读的、只向前递进的行数据流。这个对象在读取数据方面的性能最好。
Command对象可以对数据源的数据直接操作,但是如果执行的是要求返回数据结果集的查询命令或存储过程,需要先获取数据结果集的内容,然后再进行处理或输出,这就需要DataReader对象来配合。DataReader对象提供一个只读的、单向的游标,用于访问结果集的行数据。因为内存中每次仅有一个数据行,所以DataReader对象需要的开销很小,效率很高。
这里还得提一下Command对象对数据源的数据直接操作而不要求返回数据结果集的情况,这时就不需要使用DataReader对象,而是使用ExecuteNonQuery()方法完成对数据源数据的直接操作。请参见图4-46所示:
图4-46 不使用DataReader对象而直接操作数据库数据工作示意图
从图4-46中可以看出,客户端应用程序要向数据库中插入学生数据信息。将数据值写在SQL命令中或者传递给存储过程的参数,然后调用Command对象的ExecuteNonQuery()方法,学生数据就插入到数据库了。ExecuteNonQuery()方法可以返回受影响的行数,如果插入一个学生记录成功了,返回的行数就应该是1,不成功就返回-1。通过返回的受影响行数,可以判断是否成功。这个应用程序就没有使用DataReader对象。
DataReader对象不能直接使用构造函数实例化。必须通过Command对象的ExecuteReader()方法来生成。DataReader对象最主要的方法是Read()方法,用来检索行,然后用下标来访问行中的字段。在DataReader对象遍历数据记录时,数据连接必须保持打开状态,知道DataReader对象被关闭。其工作原理可以参见图4-47所示:
图4-47 DataReader对象的工作原理图
从图4-47中可以看出,客户端应用程序需要数据源提供数据时,发送查询命令到数据源。由数据源进行查询处理,返回给客户端一个只读、只进的记录集。对这个记录集的操作就是利用DataReader对象只读和只进访问方式进行的。每读一个数据就向下一条记录转移,直至记录集末尾,并且得到的数据是只读的,不能修改。整个获取数据过程需要客户端应用程序与数据源之间保持永久连接。.NET提供程序及其DataReader类,请参见表4-25所示:
表4-25 各个命名空间中的DataReader对象表
提供程序
DataReader
SQL数据提供程序
SqlDataReader
OLE DB数据提供程序
OleDbDataReader
Oracle数据提供程序
OracleDataReader
ODBC数据提供程序
OdbcDataReader
在后面的内容中,主要以SqlDataReader对象为例。

2.DataReader对象的使用

(1)DataReader对象的的属性和方法
     DataReader对象常用的方法和属性请参见表4-26和表4-27所示:
表4-26 DataReader对象常用属性表
属性
说明
HasRows
是否返回了结果
表4-27 DataReader对象常用方法表
方法
说明
 Read
前进到下一行记录
Close
关闭 DataReader 对象
请看如下代码:
private static void ReadOrderData(string connectionString)
{
    string queryString = "SELECT OrderID, CustomerID FROM dbo.Orders;";
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        SqlCommand command = new SqlCommand(queryString, connection);
        connection.Open();
        SqlDataReader reader = command.ExecuteReader();
        //访问数据前,调用Read()方法
        while (reader.Read())
        {
            Console.WriteLine(String.Format("{0}, {1}",reader[0], reader[1]));
        }
       //当读取数据后,调用Close()方法
        reader.Close();
    }

}

3.案例学习:实现添加、修改、删除、查询数据库中学生基本信息

本实验目标是要求编写一个应用程序,实现可以添加、修改、删除、查询数据库中学生基本信息的功能。用户界面如图4-48所示:
图4-48 学生基本信息应用程序界面图
本案例面临的主要问题是,如何向组合框comboBox中添加学号信息。解决的方案是,在窗体初始化Load事件中将全部学生的学号信息加载到comboBox中,读取学号信息数据的对象就是通过DataReader对象读取。
u实验步骤(1):
在VS.NET 2005中新建一个名为Form10的基于Windows的项目。将默认窗体重命名为form10.cs。
u实验步骤(2):
从工具箱之中拖拽一个GroupBox控件到Form窗体,text属性设置为“数据库信息处理”;向这个GroupBox控件拖拽三个Lable控件,text属性分别设置为“编号:”、“姓名:”、“班级:”;三个TextBox控件;一个ComboBox控件;另外还要GroupBox控件添加四个Button控件,text属性分别设置为“添加”、“修改”、“删除”、“查询”。
u实验步骤(3):
数据库的设计参见图4-49:
图4-49 数据库设计图
数据库为school1,仅用了两个表,mz是表示民族的表,student是表示学生的表。具体字段设计情况请参见图4-67。数据库环境是SQL Server 2005。
u 实验步骤(4):
鼠标右击项目,在弹出的菜单中选择“添加”、“新建项”,在弹出的“添加新项”窗体中选择“代码文件”,名称改为“DataBase.cs”,点击“添加”按钮,完成添加。
需要注意的是,DataBase.cs文件是数据库操作的主要方法集合,可以认为是数据库访问层所处文件,在后面很多地方都会应用到,今后代码不会再出现对于DataBase.cs的具体解释,请读者自行对照阅读。DataBase.cs文件主要代码如下:
u 实验步骤(5):
用鼠标双击所有Button控件,进入.cs文件编辑状态准备进行开发。代码加下:
(未完待续)

转载于:https://blog.51cto.com/qianshao/216034

4-2 ADO.NET-查询和检索数据5相关推荐

  1. 4-2   ADO.NET-查询和检索数据1

    4-2          ADO.NET-查询和检索数据<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:offic ...

  2. 4-2 ADO.NET-查询和检索数据13

    //==========动态程序设计部分================ using System; using System.Collections.Generic; using System.Co ...

  3. mysql第四章分页显示查询出租房屋信息_MYSQL必知必会读书笔记第四章之检索数据...

    MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理. 使用Select语句返回的数据,可能会发现显 ...

  4. python能查询MySQL视图_python - 在使用Django的视图中,如何从mysql检索数据,并显示它_python_酷徒编程知识库...

    这是模型:from django.db import models # Create your models here. class Contact(models.Model): name = mod ...

  5. 第六章 使用ADO.NET查询和操作数据

    1.StringBuilder类--定义可变字符串 做到既重复修改,又不创建新的对象(与String类的区别) 常用方法: 1) Append()在结尾追加 2) Insert()在指定位置插入指定字 ...

  6. SQL 100+个最佳入门案例实践(覆盖Oralce、SQL Server、Mysql)之基础操作_1_检索数据

    SQL基础操作_1_检索数据 目录 7.1.1 数据集 7.1.2 学生选课关系表 7.1.3 供应商关系表 7.2.1 从表中查询所有行和列 7.2.2 从表中查询部分行 7.2.3 查询满足某个条 ...

  7. ADO.Net 缓冲 插入大型数据

    ADO.Net 缓冲 插入大型数据 Database, C#, ASP.NET 2004-8-9 | 16:58 通过插入或更新带有字符串值或字节数组(取决于数据库中的字段类型)的字段,可以将二进制大 ...

  8. mysql-3 检索数据(1)

    SELECT 语句 SELECT检索表数据,必须至少给出两条信息--------想选择什么,以及从什么地方选择. 检索一个列 SELECT prod_name FROM products; 上述语句利 ...

  9. Oracle入门(十四G)之PL / SQL中检索数据

    一.PL / SQL中检索数据 (1)PL / SQL中的SQL语句 可以在PL / SQL中使用以下几种SQL语句: •SELECT从数据库检索数据. •DML语句,例如INSERT,UPDATE和 ...

最新文章

  1. Attention最新进展
  2. sqlserver中计算某个特殊字符在字符串中出现的位置
  3. org.hibernate.HibernateException: connnection proxy not usable after transaction
  4. 【业务知识】数字档案馆建设内容
  5. Jfinal 显示欢迎页 index.jsp
  6. 拉力测试软件界面,电脑拉力机/电脑控制拉力试验机软件操作界面与功能
  7. 老黄投下新核弹:英伟达十年力作图灵架构,新GPU支持光线追踪
  8. 1 Linux SSH安全加固
  9. 神奇网盘搜索 只搜网盘不搜其它 一键搜索所有网盘资源
  10. “不死鸟”号历险记---和扫雷过不去篇(无厘头版)
  11. You are creating too many HashedWheelTimer instances.
  12. 文件下载触发的DDE注入
  13. 要在一个领域取得成就,就必须有对该领域的独特的执着
  14. c语言练习之路4之浙大版《C语言程序设计实验与习题指导(第3版)》题目集
  15. Imagewarping变形算法研究---MLSR(Nonrigid image deformation using moving regularized least quares)
  16. 各国语言名称英文简写对照表
  17. [Centos7]Mirai QQ机器人监听播报TeamSpeak3用户状态
  18. 常用搜索引擎搜索串【ZT+原创】
  19. linux终端cd未找到命令,Linux cd 命令 command not found cd 命令详解 cd 命令未找到 cd 命令安装 - CommandNotFound ⚡️ 坑否...
  20. word文件打开密码如何找回

热门文章

  1. kali在执行 apt-get update 命令时报错的解决方法
  2. 2017上半年软考 第七章 重要知识点
  3. IDE---Gvim支持php的函数自动补全
  4. hashcode、equals和==简单总结
  5. float对div宽度的影响
  6. 复制数据表的两种情况。
  7. 用word2007发布blog
  8. 16.swift字典
  9. 为何说“内容+社交”是奥运发展化趋势?
  10. GDI+ 学习记录(3): 虚线画笔 - Dash