C# 使用SqlDataReader读取数据库数据
本文主要讲述如何使用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读取数据库数据相关推荐
- C#连接sqlserver数据库,插入数据,并且读取数据库数据画折线图。
这篇文章主要分为两个部分,1.连接数据库.2.读取数据库数据然后作图(chart控件). 首先先讲一下连接数据库,我的环境是Visual Studio2010和sqlserver2012,先确保自己电 ...
- java传入数据库生成柱状图_Java读取数据库数据生成柱状图
此案例是用swing显示数据的.须要引入jfreechart相关包.不同版本号可能包不同样.本人用的是 此案例在ssi框架下会报错,不用框架就没问题. Java后台逻辑代码: public class ...
- jmeter提取mysql数据_通过jmeter读取数据库数据,并取值作为请求的入参
为提升测试技能,督促自己学习.故写了这篇文章.测试小白一枚,最近感觉达到了自己认为的瓶颈期.总是有想法,想突破,但是无从入手.工具类用过fiddler.jmeter.charels.postman.. ...
- odoo openerp 分享-oe嵌入qweb】用js读取数据库数据,用类似html语言重写web报表
[分享-oe嵌入qweb]用js读取数据库数据,用类似html语言重写web报表 (阅读 4403 次) 阿狸 新手上路 帖子: 26 人气: 1 开启阅读模式 [分享-oe嵌入qweb]用js读取 ...
- 【超详细Django网站开发过程4】便利店管理系统之——销售员如何获取顾客数据?即:读取数据库数据(浏览器请求数据——服务器返回数据)
一个便利店要想运转顺利,肯定要有合理的管理与分配,我们店里的销售人员,也应该成为管理员,拥有一个利用浏览器向服务端访问数据的权限,这篇文章带大家走一个销售员读取数据库客户数据的流程.学会了读取数据库, ...
- java下拉框读取数据库数据_在一个jsp页面实现二级下拉框联动,实时读取数据库数据...
在一个jsp(SUN企业级应用的首选)页面实现二级下拉框联动,实时读取数据库数据,这个方法非常使用,只需要修改很小的地方就可以使用.设计的文件,serch.jsp(SUN企业级应用的首选),main. ...
- Python读取数据库数据写入Excel
Python读取数据库数据写入Excel 本文示例: 读取数据库数据 创建Excel文件,并创建指定名称的sheet页 将数据库数据写入创建的sheet页中 保存文件 示例代码: # -*- codi ...
- springboot整合poi读取数据库数据和图片动态导出excel
springboot整合poi读取数据库数据和图片动态导出excel 第一次操作 话不多说就直接上代码 实现代码 需要的依赖 <dependency><groupId>org. ...
- R语言可以直接从数据库读取数据么?R语言读取数据库数据示例
R语言可以直接从数据库读取数据么?R语言读取数据库数据示例 目录 R语言可以直接从数据库读取数据么?R语言读取数据库数据示例 R语言是解决什么问题的? R语言可以直接从数据库读取数据么?R语言读取数据 ...
最新文章
- 核心系统100%上云!全球最大流量洪峰,阿里云扛住了
- java后端传object给js_【JSON】JSON在前端和后端传递
- 数据科学入门与实战:玩转pandas之七数据透视
- 07_支持向量机3_统计学习方法
- 摄像头NV21格式转RGB的JAVA代码,测试正确
- RMSProp算法和AdaDelta算法
- 【机器学习】GBDT+LR算法进行特征扩增
- Html + JQuery 点击图片弹出视频加蒙版,全局居中并且可关闭
- 2021年文件复制软件评测:FastCopy、TeraCopy、KillCopy、ExtremeCopy、Supercopier
- Android智能聊天机器人
- 回忆我的过去一年2020年考研以及研究生规划
- 用Google地图来做出哈比人五军之战
- 小学和初中计算机的图案,信息技术和小学数学“图形和几何”的有效融合
- JavaWeb正则表达式2-不情愿模式
- 例题6-21 uva506 System Dependencies 模拟
- 软考高级信息系统项目管理师系列之:项目范围管理
- vue中使用require动态获取图片地址
- Shiro角色和权限管理
- when-otherwise for pyspark用法
- linux服务器垃圾清理,Linux下垃圾清理方法总结[转发]