本文主要讲述如何使用SqlDataReader方法来读取数据,来完成数据库增删改查中查的工作,这是C#读取数据库的主要方法。


一、环境介绍

  • Visual Studio 2015
  • SQL Server 2012
  • 控制台应用程序
  • 使用的数据库名称是Itcast2014
  • 使用的表名称是TblPerson
  • 表的字段如下图:


二、代码

注意事项:

1、代码中读取的方法是较常用的方法,除了该方法,还有其他方法,在最后介绍。

2、SqlDataReader读取数据时只读、只进,即只能读取数据,不能修改数据,并且读取数据时只能一条一条数据向后读取,不能向前读,也不能跳跃读。

3、使用SqlDataReader时必须保证连接是打开状态,使用完后要尽快关闭。

4、SqlDataReader要求独占一个连接。

        /// <summary>/// 使用SqlDataReader方式来读取数据/// </summary>private static void DataReader(){string conStr = "server=.;database=Itcast2014;integrated security=true;";using (SqlConnection con = new SqlConnection(conStr)){string cmdTxt = "select * from TblPerson";using (SqlCommand cmd = new SqlCommand(cmdTxt, con)){con.Open();using (SqlDataReader reader = cmd.ExecuteReader()){//首先判断是否有数据if (reader.HasRows){//开始读取数据,读取的方式是一行一行读,每执行一次Read(),读取一行while (reader.Read()){//大部分情况下,是用reader.GetXXXXX()的方法来获取数据,也可以用其他方法//这里的int?和bool?是确保使用?:这种三元表达式时,null的类型和后面的类型可以一致//通过reader.GetXXXXX()方法获得数据时,如果遇到null值,将报错,需要提前判断值是否为nullConsole.Write((reader.IsDBNull(0) ? null : (int?)reader.GetInt32(0)) + "\t|\t");Console.Write((reader.IsDBNull(1) ? null : reader.GetString(1)) + "\t|\t");Console.Write((reader.IsDBNull(2) ? null : (int?)reader.GetInt32(2)) + "\t|\t");Console.Write((reader.IsDBNull(3) ? null : (int?)reader.GetInt32(3)) + "\t|\t");Console.Write((reader.IsDBNull(4) ? null : (bool?)reader.GetBoolean(4)) + "\t|\t");Console.WriteLine();}}}con.Close();}}}

三、其他方法

(一)第一种方法通过reader的FieldCount属性可以获得读取到的数据有多少列,然后通过遍历每一列,用reader索引器加数字下标的方式,来获得数据。这种方法中reader[i]获得的数据是object类型,可能需要做数据转换。

                                //使用FieldCount字段来遍历读取到的每一列,通过reader索引器下标的方式来获得数据for (int i = 0; i < reader.FieldCount; i++){Console.Write(reader[i]+"\t|\t");}Console.WriteLine();

(二)第二种方法和第一种方法类似,不同的是获取数据的时候使用的是reader的GetValue(i)方法。事实上这两种方法实现的机制是相同的,唯一不同的是reader[]还可以使用列名来获得数据。

                                //使用FieldCount字段来遍历读取到的每一列,通过reader的GetValue(i)的方式来获得数据//GetValue的方法和reader[i]的方法是相同的,唯一不同的是reader还可以通过列名的方式获取数据for (int i = 0; i < reader.FieldCount; i++){Console.Write(reader.GetValue(i) + "\t|\t");}Console.WriteLine();

(三)通过索引器加列名的方式获取数据,不过这种方式在内部实现机制上,就是通过一个reader.GetOrdinal(列名)来获得列名对应的id的方式,最后通过索引器加下标获得数据的。

                                //通过reader索引器加列名的方式获得数据Console.Write(reader["autoId"]+"\t|\t");Console.Write(reader["uName"] + "\t|\t");Console.Write(reader["age"] + "\t|\t");Console.Write(reader["height"] + "\t|\t");Console.Write(reader["gender"] + "\t|\t");Console.WriteLine();

注意:

以上三种方法返回的都是object类型,可能需要类型转换,使用时没有上面的第一种强类型的方法方便,一般情况下,我们会使用第一种方法,更严谨方便,还有一点不同的是最后三种方法在遇到null值时,会自动显示为空。

C# 使用SqlDataReader读取数据库数据相关推荐

  1. C#连接sqlserver数据库,插入数据,并且读取数据库数据画折线图。

    这篇文章主要分为两个部分,1.连接数据库.2.读取数据库数据然后作图(chart控件). 首先先讲一下连接数据库,我的环境是Visual Studio2010和sqlserver2012,先确保自己电 ...

  2. java传入数据库生成柱状图_Java读取数据库数据生成柱状图

    此案例是用swing显示数据的.须要引入jfreechart相关包.不同版本号可能包不同样.本人用的是 此案例在ssi框架下会报错,不用框架就没问题. Java后台逻辑代码: public class ...

  3. jmeter提取mysql数据_通过jmeter读取数据库数据,并取值作为请求的入参

    为提升测试技能,督促自己学习.故写了这篇文章.测试小白一枚,最近感觉达到了自己认为的瓶颈期.总是有想法,想突破,但是无从入手.工具类用过fiddler.jmeter.charels.postman.. ...

  4. odoo openerp 分享-oe嵌入qweb】用js读取数据库数据,用类似html语言重写web报表

    [分享-oe嵌入qweb]用js读取数据库数据,用类似html语言重写web报表  (阅读 4403 次) 阿狸 新手上路 帖子: 26 人气: 1 开启阅读模式 [分享-oe嵌入qweb]用js读取 ...

  5. 【超详细Django网站开发过程4】便利店管理系统之——销售员如何获取顾客数据?即:读取数据库数据(浏览器请求数据——服务器返回数据)

    一个便利店要想运转顺利,肯定要有合理的管理与分配,我们店里的销售人员,也应该成为管理员,拥有一个利用浏览器向服务端访问数据的权限,这篇文章带大家走一个销售员读取数据库客户数据的流程.学会了读取数据库, ...

  6. java下拉框读取数据库数据_在一个jsp页面实现二级下拉框联动,实时读取数据库数据...

    在一个jsp(SUN企业级应用的首选)页面实现二级下拉框联动,实时读取数据库数据,这个方法非常使用,只需要修改很小的地方就可以使用.设计的文件,serch.jsp(SUN企业级应用的首选),main. ...

  7. Python读取数据库数据写入Excel

    Python读取数据库数据写入Excel 本文示例: 读取数据库数据 创建Excel文件,并创建指定名称的sheet页 将数据库数据写入创建的sheet页中 保存文件 示例代码: # -*- codi ...

  8. springboot整合poi读取数据库数据和图片动态导出excel

    springboot整合poi读取数据库数据和图片动态导出excel 第一次操作 话不多说就直接上代码 实现代码 需要的依赖 <dependency><groupId>org. ...

  9. R语言可以直接从数据库读取数据么?R语言读取数据库数据示例

    R语言可以直接从数据库读取数据么?R语言读取数据库数据示例 目录 R语言可以直接从数据库读取数据么?R语言读取数据库数据示例 R语言是解决什么问题的? R语言可以直接从数据库读取数据么?R语言读取数据 ...

最新文章

  1. 核心系统100%上云!全球最大流量洪峰,阿里云扛住了
  2. java后端传object给js_【JSON】JSON在前端和后端传递
  3. 数据科学入门与实战:玩转pandas之七数据透视
  4. 07_支持向量机3_统计学习方法
  5. 摄像头NV21格式转RGB的JAVA代码,测试正确
  6. RMSProp算法和AdaDelta算法
  7. 【机器学习】GBDT+LR算法进行特征扩增
  8. Html + JQuery 点击图片弹出视频加蒙版,全局居中并且可关闭
  9. 2021年文件复制软件评测:FastCopy、TeraCopy、KillCopy、ExtremeCopy、Supercopier
  10. Android智能聊天机器人
  11. 回忆我的过去一年2020年考研以及研究生规划
  12. 用Google地图来做出哈比人五军之战
  13. 小学和初中计算机的图案,信息技术和小学数学“图形和几何”的有效融合
  14. JavaWeb正则表达式2-不情愿模式
  15. 例题6-21 uva506 System Dependencies 模拟
  16. 软考高级信息系统项目管理师系列之:项目范围管理
  17. vue中使用require动态获取图片地址
  18. Shiro角色和权限管理
  19. when-otherwise for pyspark用法
  20. linux服务器垃圾清理,Linux下垃圾清理方法总结[转发]

热门文章

  1. 每日股市大盘自动复盘(基于聚宽量化投资平台)
  2. 网页爬虫实战:全国电动汽车充电站数据
  3. 嗨,程序员,你知道高级工程师用的搜索引擎吗?
  4. 信阳师范学院计算机老师,信阳师范学院计算机与信息技术学院导师教师师资介绍简介-樊建伟...
  5. Windows10 LTSC 2021 64位下载使用
  6. 计算机网络个人简历范文,计算机网络个人简历范文
  7. char类型的取值范围
  8. 微信开通状态检测说明书
  9. 深圳区块链企业在江岸区设区域总部
  10. 深圳市数字经济指数发布:数字经济蓬勃发展,数字用户深度渗透