C# DataReader:读取查询结果

在C# 中 DataReader 类的作用是读取查询结果,与在《C# Command》一节中介绍的 Command 类

中的 ExecuteReader 方法一起使用。

下面来介绍一下 DataReader 类中常用的属性和方法,以及如何使用该类查询表中的数据。

DataReader 类概述

DataReader 类在 System.Data.SqlClient 命名空间中,对应的类是 SqlDataReader,主要用于读取表

中的查询结果,并且是以只读方式读取的(即不能修改 DataReader 中存放的数据)。

正是由于 DataReader 类的特殊的读取方式,其访问数据的速度比较快,占用的服务器资源比较少。

SqlDataReader 类中常用的属性和方法如下表所示。

属性或方法

说明

FieldCount

属性,获取当前行中的列数

HasRows

属性,获取 DataReader 中是否包含数据

IsClosed

属性,获取 DataReader 的状态是否为已经被关闭

Read

方法,让 DataReader 对象前进到下一条记录

Close

方法,关闭 DataReader 对象

Get XXX(inti)

方法,获取指定列的值,其中XXX代表的是数据类型。例如获取当前行第1列 double 类型的值,获取方法为GetDouble(o)

使用 DataReader 类读取查询结果

在使用 DataReader 类读取查询结果时需要注意,当查询结果仅为一条时,可以使用 if 语句查询

DataReader 对象中的数据,如果返回值是多条数据,需要通过 while 语句遍历 DataReader 对象中

的数据。

在使用 DataReader 类读取查询结果时需要通过以下步骤完成:

1) 执行 SqlCommand 对象中的 ExecuteReader 方法

具体代码如下。

SplDataReader dr=SqlCommand 类实例 .ExecuteReader();

 2) 遍历 SqlDataReader 中的结果

SqlDataReader 类中提供的 Read 方法用于判断其是否有值,并指向 SqlDataReader 结果中的下一条记录。

dr.Read()

如果返回值为 True,则可以读取该条记录,否则无法读取。

在读取记录时,要根据表中的数据类型来读取表中相应的列。

3) 关闭 SqlDataReader

下面通过实例来演示 SqlDataReader 类的使用。

【实例】根据用户姓名查询用户的编号和密码,并将编号和密码显示在标签控件 (Label) 上。

根据姓名查询用户信息的界面如下图所示。

在该界面中默认情况下显示“没有符合条件的结果”,如果根据文本框中输入的用户名能查询到指定用

户的信息,则将默认文字替换成用户编号和密码。

实现该功能的代码 如下。

//"查询"按钮单击事件

private void button1_Click(Object sender,EventArgs e)
{//编写数据库连接串string connStr ="Data Source=.;Initial Catalog=test;User ID=sa;Password=sa123456"//创建 SqlConnection的实例SqlDataReader dr = null;try{conn = new SqlConnection(connStr);//打开数据库连接conn.Open();string sql = "select id,password from userinfo where name='{0}'";//填充Sql语句sql = string.Format(sql,textBox1.Text);//执行Sql语句dr = cmd.ExecuteReader();//判断SQL语句是否执行成功if(dr.Read()){//读取指定用户名对应的用户编号和密码string msg = “用户编号:”+dr[0]+"密码"+dr[1];//将msg的值显示在标签上label2.Text = msg;}}catch(Exception ex){MexxageBox.Show("查询失败!"+ex.Message);}finally{if(dr != null){//判断dr不为空,关闭SplDataReader对象dr.Close();}if(conn != null){//关闭数据库连接conn.Close();}}
}

运行该窗体,效果如下图所示。

从上面的运行效果可以看出,“张三”用户对应的用户编号为 1、密码为 123456。

需要注意的是,实现上述功能的要求是用户表中的用户名是唯一的,以避免出现查询错误。

C# DataReader读取查询相关推荐

  1. DataReader:读取查询结果

    1)DataReader概念: DataReader 类在 MySql.Data.MySqlClient命名空间中,对应的类是 MysqlDataReader, 主要用于读取表中的查询结果,并且是以只 ...

  2. 在AngularJS中读取查询参数的最简洁方法是什么?

    本文翻译自:What's the most concise way to read query parameters in AngularJS? I'd like to read the values ...

  3. WINCC SQL报警记录和变量记录数据读取查询

    WINCC SQL报警记录和变量记录数据读取查询 按时间查询报警记录 用到控件为listView,textbox,progctrl,ImageComboCtrl Sub X6309X94AE1X000 ...

  4. 更新安全补丁后无法读取查询导入Excel问题解决说明书

    由于微软在2017-10-10左右更新了安全补丁(KB4041678,KB4041681) 从而更新了Microsoft JETDatabase Engine导致asp.asp.net等无法读取Exc ...

  5. datatable 创建列赋值_DataTable创建行和列,DataReader读取

    public DataTable read() { string str = "select id,UserName,UserPwd from Users"; //SQL语句 Sq ...

  6. 使用datareader’读取Yahoo财经数据

    一.环境 window10.Python3.6 二.问题 在<利用Python进行数据分析>一书中,学习到pandas这一章节,利用书中的方法去获取雅虎数据会出现以下问题: 问题一: im ...

  7. asp.net中读取数据库中的数据可以使用DataReader和DataSet 2种方式(初学者望大家不要笑我)...

    在asp.net中,读取数据库中的数据可以使用DataReader和DataSet 2种方式, 两者的差异如下:     使用Dataset对象读取数据大致需要以下5个步骤:     (1)建立数据库 ...

  8. EFCore查缺补漏(二):查询

    相关文章: EFCore查缺补漏 第 20 轮 TechEmpower 评测结果出炉了,ASP.NET Core 的 Plaintext 成绩名列前茅,带着 EFCore 的测试却在 Single q ...

  9. SQL那些事儿(十二)--DATASET 与 DATAREADER区别

    DataReader和DataSet最大的区别在于,DataReader使用时始终占用SqlConnection(俗称:非断开式连接),在线操作数据库时,任何对SqlConnection的操作都会引发 ...

最新文章

  1. 区块链的安全软肋是什么?
  2. 静态方法只能通过类名调用吗?
  3. python fileinput_python fileinput模块
  4. springboot使用hibernate validator校验
  5. 从实例入手学习Vue-router的使用-实现音乐导航菜单切换
  6. 阿里云主机CentOS添加硬盘
  7. 【问底】徐汉彬:PHP7和HHVM的性能之争
  8. 苹果Mac上的6 款值得开机启动的工具
  9. PPT的视频由于无编码解码器无法播放问题
  10. 2021 绩效管理必读
  11. 推送流程(极光推送)
  12. docker onlyoffice7.1.1 word excel ppt在线编辑、在线预览_添加中文字体和中文字号_02
  13. 错误:没有找到合适的设备:没有找到可用于链接System eth0 的设备
  14. linux复制并重命名文件
  15. MySQL5.7 固态盘性能设置_MySQL 5.7 安装完成后,立即要调整的性能选项
  16. 学生课程管理系统html界面,学生课程管理系统手机微信页面模板
  17. 多元统计分析最短距离法_(完整word版)多元统计分析模拟试题
  18. java中的saturn_Saturn简介及架构介绍
  19. .net 使用ClickOne方式发布的应用程序无法启动的解决办法
  20. nginx负载均衡配置,宕机自动切换方式

热门文章

  1. 实用SQL语句编写技巧
  2. 基于android的新闻阅读系统
  3. 医疗器械研发技术文件清单与文件模板
  4. 〖产品思维训练白宝书 - 核心竞争力篇⑦〗- 产品经理核心竞争力解读之如何提升执行力
  5. 新Android反编译教程
  6. android 模拟发送http请求超时,OKHttp请求超时无效问题记录
  7. 开关电源PCB设计六大步骤
  8. 804. 唯一摩尔斯密码词(对照转换)
  9. Python爬虫实战,Request+urllib模块,批量下载爬取飙歌榜所有音乐文件
  10. 国产麒麟系统一键部署PXE脚本传统BIOS(legacy)引导 仅供参考