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类访问字段的值相关推荐

  1. Java-Day11 面向对象遍程的入门 (类属性的默认值、构造方法、类的成员、static关键字、类的成员加载顺序、Java(权限)访问修饰符)

    目录 1. 类的属性的默认值问题 2. 构造方法(Constructor) 3. 类的成员 3.1 类的成员之一:属性 3.2 UML类图 4. static关键字 5. 类的成员加载(运行)顺序 6 ...

  2. sqlite字段是否存在_学习廖雪峰的JAVA教程---反射(访问字段)

    对任意的一个Object实例,只要我们获取了它的Class,就可以获取它的一切信息. 我们先看看如何通过Class实例获取字段信息.Class类提供了以下几个方法来获取字段: Field getFie ...

  3. javabean反射改字段内容_java反射机制给实体类相同字段自动赋值实例

    一.封装一个工具类 1.简易版 package net.aexit.construct.acceptance.websky.utils; import java.lang.reflect.Field; ...

  4. solr 查询字段唯一值_《Solr实战》之一

    本文记录笔者在阅读<Solr实战>的读书笔记,将笔者认为重要的内容摘录出来. Solr擅长处理的数据类型 以文本为中心 读主导 文档被读取的次数远大于被创建和更新的次数 面向文档 灵活的模 ...

  5. java反射类的字段

    java反射类的字段: package com.ma.reflection;import java.lang.reflect.Field;import org.junit.Test;import co ...

  6. 【Groovy】MOP 元对象协议与元编程 ( Expando 动态类 | 创建动态类 | 为动态类增加字段和方法 )

    文章目录 一.Expando 动态类简介 二.动态类创建 三.为动态类增加字段和方法 四.完整代码示例 一.Expando 动态类简介 Groovy 运行时 , 可以动态地创建一个类 , 该类称为 & ...

  7. C++——类访问修饰符

    类访问修饰符 数据封装是面向对象编程的一个重要特点,它防止函数直接访问类类型的内部成员.类成员的访问限制是通过在类主体内部对各个区域标记 public.private.protected 来指定的.关 ...

  8. EtherType :以太网类型字段及值

    Ethernet II即DIX 2.0:Xerox与DEC.Intel在1982年制定的以太网标准帧格式.Cisco名称为:ARPA Ethernet II类型以太网帧的最小长度为64字节(6+6+2 ...

  9. mybaits 字段设置null_为什么阿里巴巴禁止开发人员修改serialVersionUID 字段的值

    简介: 介绍一下关于serialVersionUID .这个字段到底有什么用?如果不设置会怎么样?为什么<Java开发手册>中有那样的规定? 作者 | Hollis 序列化是一种对象持久化 ...

最新文章

  1. django基本操作
  2. 简单的JSP登录程序
  3. 深度?广度?浅析技术人员的职业发展之路
  4. 新入职一家公司如何梳理业务?
  5. 自动备份html文件,windows下定期自动备份本地文件(文件夹)
  6. Vivado提高综合和实现的速度
  7. 第九十一期:架构设计常用到的10种设计模式,你都知道吗?
  8. linux与linux传文件乱码,关于Linux与windows传递文件乱码问题
  9. 视频工作者应该知道的几个网站
  10. 解题报告 poj 1087
  11. Python数学建模 缺失值与异常值处理
  12. 用python下载ts视频
  13. ansys workbench汉化教程_ansys16.0软件下载及安装教程
  14. DSP SRIO接口设计
  15. Linux虚拟机配置防火墙和软件安装限制
  16. python实现ddos防护_python实现的防DDoS脚本
  17. 锁定计算机和睡眠有什么区别,电脑系统待机、睡眠和休眠的区别有哪些
  18. 2019全球数据新闻奖揭晓
  19. win10重启不能上网(只能QQ上网,打不开浏览器网页)
  20. 自己写jquery表单验证

热门文章

  1. 量子密钥和量子计算机是什么关系,关于量子通信,这些问题你困惑过吗?
  2. android wear ios表盘,秒杀 Apple Watch,Android Wear 又有 17 款新表盘可以玩啦!
  3. jeecgboot配置文件_Jeecg-Boot 技术文档
  4. 我的世界java版使用剑_我的世界:JAVA版藏“私货”内置绝世好剑与神功,你玩的版本有吗...
  5. Cassandra操作入门
  6. VMware Workstation安装虚拟机失败
  7. 【BZOJ3152】组合子逻辑,贪心+堆
  8. 每日小记2017.2.20
  9. android gps 案例_GPS学习要点10
  10. metrics的timer功能在java项目中的使用方法