DataReader类访问字段的值
DataReader类访问字段的值
有2种方法。第一种是Item属性,此属性返回字段索引或者字段名字对应的字段的值。第二种是Get方法,此方法返回有字段索引指定的字段的值。有点难以理解,不是吗?不要紧,看例子就OK了。
Item属性
每个DataReader类都定义一个Item属性。比如现在我们有一个DataReader实例dr,对应的sql语句是select Fid,Fname from friend,则我们可以使用下面的方法取得返回的值:
object ID = dr[“Fid”];
object Name = dr[“Fname”];
或者:
object ID = dr[0];
object Name = dr[0];
注意索引总是从0开始的。另外也许您发现了我们使用的是object来定义对ID和Name,是的,Item属性返回的值是object型,但是您可以强制类型转换。
int ID = (int)dr[“Fid”];
string Name = (string)dr[“Fname”];
记住:确保类型转换的有效性是您自己的责任,否则您将得到异常。
Get方法
起始我们在第一篇文章里面已经使用过改方法了。每个DataReader都定义了一组Get方法,比如GetInt32方法把返回的字段值作为.net clr 32位证书。同上面的例子一样我们用如下方式访问Fid和Fname的值:
int ID = dr.GetInt32(0);
string Name = dr.GetString(1);
注意虽然这些方法把数据从数据源类型转化为.net数据类型,但是他们不执行其他的数据转换,比如他们不会把16位整数转换为32位的。所以您必须使用正确的Get方法。另外Get方法不能使用字段名来访问字段,也就是说上面的没有:
int ID = dr.GetInt32(“Fid”); //错误
string Name = dr.GetString(“Fname”); //错误
显然上面这个缺点在某些场合是致命的,当你的字段很多的时候,或者说你过了一段时间以后再来看你这些代码,你会觉得很难以理解!当然我们可以使用其他方法来尽量解决这个问题。一个可行的办法是使用const:
const int FidIndex = 0;
const int NameIndex = 1;
int ID = dr.GetInt32(FidIndex);
string Name = dr.GetString(NameIndex);
这个办法并不怎么好,另外一个好一些的办法:
int NameIndex = dr.GetOrdinal(“Fname”); //取得Fname对应的索引值
string Name = dr.GetString(NameIndex);
这样似乎有点麻烦,但是当须要遍历阅读器种大量的结果集的时候,这个方法很有效,因为索引只需执行一次。
int FidIndex = dr.GetOrdinal(“Fid”);
int NameIndex = dr.GetOrdinal(“Fname”);
while(dr.Read())
{
int ID = dr.GetInt32(FidIndex);
string Name = dr.GetInt32(NameIndex);
}
DataReader类访问字段的值相关推荐
- Java-Day11 面向对象遍程的入门 (类属性的默认值、构造方法、类的成员、static关键字、类的成员加载顺序、Java(权限)访问修饰符)
目录 1. 类的属性的默认值问题 2. 构造方法(Constructor) 3. 类的成员 3.1 类的成员之一:属性 3.2 UML类图 4. static关键字 5. 类的成员加载(运行)顺序 6 ...
- sqlite字段是否存在_学习廖雪峰的JAVA教程---反射(访问字段)
对任意的一个Object实例,只要我们获取了它的Class,就可以获取它的一切信息. 我们先看看如何通过Class实例获取字段信息.Class类提供了以下几个方法来获取字段: Field getFie ...
- javabean反射改字段内容_java反射机制给实体类相同字段自动赋值实例
一.封装一个工具类 1.简易版 package net.aexit.construct.acceptance.websky.utils; import java.lang.reflect.Field; ...
- solr 查询字段唯一值_《Solr实战》之一
本文记录笔者在阅读<Solr实战>的读书笔记,将笔者认为重要的内容摘录出来. Solr擅长处理的数据类型 以文本为中心 读主导 文档被读取的次数远大于被创建和更新的次数 面向文档 灵活的模 ...
- java反射类的字段
java反射类的字段: package com.ma.reflection;import java.lang.reflect.Field;import org.junit.Test;import co ...
- 【Groovy】MOP 元对象协议与元编程 ( Expando 动态类 | 创建动态类 | 为动态类增加字段和方法 )
文章目录 一.Expando 动态类简介 二.动态类创建 三.为动态类增加字段和方法 四.完整代码示例 一.Expando 动态类简介 Groovy 运行时 , 可以动态地创建一个类 , 该类称为 & ...
- C++——类访问修饰符
类访问修饰符 数据封装是面向对象编程的一个重要特点,它防止函数直接访问类类型的内部成员.类成员的访问限制是通过在类主体内部对各个区域标记 public.private.protected 来指定的.关 ...
- EtherType :以太网类型字段及值
Ethernet II即DIX 2.0:Xerox与DEC.Intel在1982年制定的以太网标准帧格式.Cisco名称为:ARPA Ethernet II类型以太网帧的最小长度为64字节(6+6+2 ...
- mybaits 字段设置null_为什么阿里巴巴禁止开发人员修改serialVersionUID 字段的值
简介: 介绍一下关于serialVersionUID .这个字段到底有什么用?如果不设置会怎么样?为什么<Java开发手册>中有那样的规定? 作者 | Hollis 序列化是一种对象持久化 ...
最新文章
- django基本操作
- 简单的JSP登录程序
- 深度?广度?浅析技术人员的职业发展之路
- 新入职一家公司如何梳理业务?
- 自动备份html文件,windows下定期自动备份本地文件(文件夹)
- Vivado提高综合和实现的速度
- 第九十一期:架构设计常用到的10种设计模式,你都知道吗?
- linux与linux传文件乱码,关于Linux与windows传递文件乱码问题
- 视频工作者应该知道的几个网站
- 解题报告 poj 1087
- Python数学建模 缺失值与异常值处理
- 用python下载ts视频
- ansys workbench汉化教程_ansys16.0软件下载及安装教程
- DSP SRIO接口设计
- Linux虚拟机配置防火墙和软件安装限制
- python实现ddos防护_python实现的防DDoS脚本
- 锁定计算机和睡眠有什么区别,电脑系统待机、睡眠和休眠的区别有哪些
- 2019全球数据新闻奖揭晓
- win10重启不能上网(只能QQ上网,打不开浏览器网页)
- 自己写jquery表单验证
热门文章
- 量子密钥和量子计算机是什么关系,关于量子通信,这些问题你困惑过吗?
- android wear ios表盘,秒杀 Apple Watch,Android Wear 又有 17 款新表盘可以玩啦!
- jeecgboot配置文件_Jeecg-Boot 技术文档
- 我的世界java版使用剑_我的世界:JAVA版藏“私货”内置绝世好剑与神功,你玩的版本有吗...
- Cassandra操作入门
- VMware Workstation安装虚拟机失败
- 【BZOJ3152】组合子逻辑,贪心+堆
- 每日小记2017.2.20
- android gps 案例_GPS学习要点10
- metrics的timer功能在java项目中的使用方法