SqlDataReader的用法(重点:访问字段的值)
在基于链接的数据库访问模式下,查询类操作通常是执行select命令,产生的查询结果可以通过SqlDataReader类依次读取。
SqlDataReader类是ADO.NET提供的用于读取SQL Server数据库记录的只读向前数据记录读取器。
开始时,SqlDataReader指向第一条记录之前,不能直接,通过SqlDataReader,Read()方法可以读取下一条记录,重复指令,直到全部记录读取完成
为了方便获取数据记录中的某个字段的值,SqlDataReader类还提供GetXXX()一系列的方法,将指定字段的数据按照特定数据类型读取,如int、string、DataTime等等
**********************************************************************************************************************************************************************************
SqlDataReader类常用成员
一、属性
1、Depth:表示当前行的嵌套属性(我不常用)
2、FieldCount:表示当前行中的列数
3、HasRows:表示当前行SqlDataReader是否包含一行或多行(常用,用于登录检测用户是否存在)
4、IsClose:表示SqlDataReader实例是否已经关闭了
5、VisibleFieldCount:表示当前SqlDataReader中未隐藏的字段的数目。
二、方法
Read():使得当前SqlDataReader前进道下一条记录,即向前读取。(常用)
我们经常这样做: While(dr.Reader()) //遍历所有记录
{ //do something with the current record }
注意,如果每一条记录的操作可能花费比较长的时间,那么意味着阅读器将长时间打开,那么数据库连接也将维持长时间的打开状态。
此时使用非连接的DataSet或许更好一些。
NextResult() :使得数据读取器前进道下一个结果,注意,不是一行记录
IsDBNull():确定指定列中是否包含不存在或缺少的值。
Close():关闭当前SqlDataReader实例。
【GetXXXXX()的用法】索引从0开始→//转载yanjun_xiaoli博客:
访问字段的值 有2种方法。
第一种是Item属性,此属性返回字段索引或者字段名字对应的字段的值。
第二种是Get方法,此方法返回有字段索引指定的字段的值。看例子。
(1) Item属性 每个DataReader类都定义一个Item属性。比如现在我们有一个DataReader实例dr,对应的sql语句是select Fid,Fname from friend,则我们可以使用下面的方法取得返回的值:
【实例取值】
string strSql = "Data Source=VQJREZV7DVSK2QA;Initial Catalog=gridviewAPP;User ID=sa;Password=admin@123456";
SqlConnection connew = new SqlConnection(strSql);
SqlCommand cmd = connew.CreateCommand();
connew.Open();
cmd.CommandText = "select userName,sex,address from userInfo";
SqlDataReader dr = cmd.ExecuteReader();
System.Console.WriteLine("查询的结果如下:");
while (dr.Read())
{
//string username,string sex,string address
Label1.Text= dr.GetString(0);
Label2.Text= dr.GetString(1);
Label3.Text= dr.GetString(2);
}
connew.Close();
******************************************************************************************************************
无奈而华丽丽的分割线【DataReader的创建方法】
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
【1】遍历DataReader结果集
//SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
//SqlDataReader dr = cmd.ExecuteReader();
//while (dr.Read())
//{
// Response.Write(dr.GetInt32(0).ToString() + ", " + dr.GetString(1) + "<br>");
//}
//dr.Close();
【2】使用列名索引器
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
Response.Write(dr["ProductId"].ToString() + ", " + dr["Name"].ToString() + "<br>");
}
dr.Close();
myConnection.Close();
【3】使用序数索引器
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
Response.Write(dr[0].ToString() + ", " + dr[1].ToString()+ "<br>");
}
【4】操作多个数据集
//SqlDataReader dr = cmd.ExecuteReader();
dr.NextResult(); //使数据读取器前进到下一个结果集
do
{
while (dr.Read())
{
Response.Write(dr.GetInt32(0).ToString() + ", " + dr.GetString(1) + "<br>");
}
}
while(dr.NextResult());
dr.Close();
******************************************************************************************************************
无奈而华丽丽的分割线【DataReader注意事项】
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
使用DataReader的一些注意事项:
(1)使用带参数的Command前,必须关闭DataReader;
(2)完成读数据之后一定要关闭DataReader;
(3)不能在层之间远程访问DataReader,它只为已经连接好的数据访问而设计;
(4)一个单一连接每次只能打开一个DataReader;
(5)在默认情况下,DataReader每次执行Read()时候都要将整行加载到内存中
(6)注意,当访问数据时候,使用类型访问器,如GetString等等,这使得你不用将GetValue返回的Object强制转换成特定类型》【切记】
类型访问器有:GetChar(int i);GetDataTime(int i);GetInt16(int i);GetString(int i)之类的。
dr.GetDataTypeName(int i) //获取源数据类型的名称
dr.GetFieldType((int i) //获取对象的数据类型的Type
dr.GetName(int i) //获取指定列的名称
dr.GetOrdinal(int i) //在给定列名称的情况下获取列序号
SqlDataReader的用法(重点:访问字段的值)相关推荐
- DataReader类访问字段的值
DataReader类访问字段的值 有2种方法.第一种是Item属性,此属性返回字段索引或者字段名字对应的字段的值.第二种是Get方法,此方法返回有字段索引指定的字段的值.有点难以理解,不是吗?不要紧 ...
- sqlite字段是否存在_学习廖雪峰的JAVA教程---反射(访问字段)
对任意的一个Object实例,只要我们获取了它的Class,就可以获取它的一切信息. 我们先看看如何通过Class实例获取字段信息.Class类提供了以下几个方法来获取字段: Field getFie ...
- EtherType :以太网类型字段及值
Ethernet II即DIX 2.0:Xerox与DEC.Intel在1982年制定的以太网标准帧格式.Cisco名称为:ARPA Ethernet II类型以太网帧的最小长度为64字节(6+6+2 ...
- solr 查询字段唯一值_《Solr实战》之一
本文记录笔者在阅读<Solr实战>的读书笔记,将笔者认为重要的内容摘录出来. Solr擅长处理的数据类型 以文本为中心 读主导 文档被读取的次数远大于被创建和更新的次数 面向文档 灵活的模 ...
- oracle查询时根据查询的时间字段改变状态字段的值
最近在开发的过程中遇到如下一个场景:oracle数据库商品表里面有商品的下线时间字段shelf_time 和状态字段 goods_statu,有个定时任务定时扫描商品表,如果当前商品状态为1(上线状 ...
- elasticsearch获取一个字段的值_Elasticsearch,你觉得自己懂了多少,看看这篇文章吧...
Elasticsearch分析与检索功能实操 虽然通过文档_id可以获取到文档,但_id字段一般都是一个无意义的值,在实际应用中更多地是使用文档其它有意义字段做检索.Elasticsearch提供一个 ...
- PHP二维数组用某个字段的值当做键名
最近在学习使用array_column函数,发现一个比较实用的用法.很多时候,我们在获取的二维数组都是索引数组,在某些时刻使用时并不方便,最好是能够以某个字段的值作为键名,这样就能更好的使用了.绝大多 ...
- sql 查询文本字段中值的长度最长的记录
一.函数 1.SQL Server LEN() 函数返回文本字段中值的长度. SELECT LEN(column_name) FROM table_name; 2.MySQL LENGTH() 函数返 ...
- 【ES6新特性】一行代码解决:搜索对象数组,匹配具体字段属性值的返回值和索引的问题
arr.find(v => v.key == "需要搜索的值") //返回搜索匹配字段属性值的对象arr.findIndex(v => v.key == "需 ...
- awk: (FILENAME=- FNR=1) 致命错误: 试图访问字段 -2
执行:awk '{print $(NF-2)}' aa.log 出现错误:awk: (FILENAME=aa.log FNR=1) 致命错误: 试图访问字段 -2 可能和aa.log中数据有关系: 改 ...
最新文章
- html css js实现快递单打印_html+css+js实现计算器
- Win10-OpenCV双目相机开发
- aitken插值方法的c++代码_无人驾驶路径规划技术-三次样条插值曲线及Python代码实现...
- CentOS 7.1云服务器 配置FTP服务器vsftpd
- 清空数据库错误:因为该表正由 FOREIGN KEY 约束引用 解决办法
- 【8】万魂杀服务器开发方面之新版GM工具
- java制作安卓客户端,java做服务器,android干客户端,实现数据传输
- java date sethours,如何替换不推荐使用的方法Date.setHours(int)?
- JIRA中设置[描述]字段的默认值
- python项目报告怎么写_python项目
- FILD FLD FSTP
- Jzoj5460【NOIP2017提高A组冲刺11.7】士兵训练
- 安卓+七牛云的第三方图片存储实践
- mysql报错1517_错误日志 userenv ID1524 1517
- iphone/ios兼容问题
- 2019牛客多校训练营第一场 H题 HOR 题解
- zynq7000 资源介绍
- java 工作两年的简历_工作经验只有两年的Java开发,简历中需要写学校经历吗?...
- 原生JDK网络编程之NIO篇
- 尚学堂Java学习日记Day1