使用特性

原理图

PS:Read()使指针下移,同时销毁上一条。所以SqlDataReader是只进的。

GetValue()是找当前行中的列

SqlDataReader()特性。

1)只进的  上面原理图描述了。

2)只读的   SqlDataReader只能获取,不能修改。

3)使用SqlDataReader必须保证,Connection的状态是打开的。

因为结果集存储在数据库服务器中,不打开连接是找不到。

读数据的方式

1.reader.GetValue(0)

没有列名的重载。

2.reader[1]

索引器就是用GetValue(0)实现的。

3.reader["列名"]

内部通过GetOrdinal()实现的

//先获取索引
int index = reader.GetOrdinal(columnName);
//再通过索引找到对应的列。
reader.GetValue(index);
/***注意***:reader["列名"]的执行效率非常差,不建议使用。
因为如果这样的语句在循环中,循环多少次,就会执行
多少次没用的 int index = reader.GetOrdinal(columnName);
*/
如果项目中必须使用列名,建议这样用,千万别傻乎乎的写到循环里头。
//把获取列名写在循环外头。
int c1 = reader.GetOrdinal("列名");
while(reader.Read())
{
object obj = reader[c1];
}

获取强类型数据

reader.GetString();
reader.GetINT32();
reader.GetDouble();//数据库里的float,这里要用Double。

为什么要获取强类型呢?

因为Object对象在使用时,要进行一次拆箱,要有性能损耗的。

DataReader读取两个结果集

do{
if(reader.HasRows)
{
while(reader.read())
{ /*读数据*/
}
}
}
//如果有其他结果集,就继续循环!
while(reader.NextResult());

动态的获取强类型

if(reader.HasRows)
{
while(reader.Read())
{ //遍历列
for(int i =;i<reader.FieldCount;i++)
{ //获取数据类型
string dbType =reader.GetDataTypeName(i);
switch(dbType)
{
case "varchar":
case "nvarchar"
case "char":
case "nchar":
reader.GetString(i) ;//简写
break;
case "int":
......
}
}
}
}

IsDBNull

当结果集中的列为null,并且需要用强类型获取时,需要用IsDBNull判断一下。

  string obj = reader.IsDBNull()? "" : reader.GetString();
 

ADO.NET中的DataReader详解的更多相关文章

  1. ADO.NET中的Connection详解

    连接字符串 1.写法一 "Data Source=服务器名; Initial Catalog=数据库; User ID =用户名; Password=密码; Charset=UTF8; &q ...

  2. ADO.NET中的Command详解

    Command方法介绍 1.ExecuteNonQuery 对于Update.Insert.Delete执行并返回受影响行数 对于其他语句返回 -1 2.ExecuteScalar 执行查询.并返回结 ...

  3. Asp.net中GridView使用详解(很全,很经典 转来的)

    Asp.net中GridView使用详解 效果图参考:http://hi.baidu.com/hello%5Fworld%5Fws/album/asp%2Enet中以gv开头的图片 l         ...

  4. Asp.net中GridView使用详解(引)【转】

    Asp.net中GridView使用详解(引) GridView无代码分页排序 GridView选中,编辑,取消,删除 GridView正反双向排序 GridView和下拉菜单DropDownList ...

  5. Asp.net中GridView使用详解(很全,很经典)

    http://blog.csdn.net/hello_world_wusu/article/details/4052844 Asp.net中GridView使用详解 效果图参考:http://hi.b ...

  6. php中关于引用(&)详解

    php中关于引用(&)详解 php的引用(就是在变量或者函数.对象等前面加上&符号) 在PHP 中引用的意思是:不同的变量名访问同一个变量内容. 与C语言中的指针是有差别的.C语言中的 ...

  7. JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解

    二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...

  8. AngularJS select中ngOptions用法详解

    AngularJS select中ngOptions用法详解   一.用法 ngOption针对不同类型的数据源有不同的用法,主要体现在数组和对象上. 数组: label for value in a ...

  9. 【转载】C/C++中extern关键字详解

    1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 也就是说extern ...

随机推荐

  1. iOS开发之检查更新

    iOS设备检查更新版本: #pragma mark - 检查更新 - (void)checkUpdateWithAPPID:(NSString *)APPID { //获取当前应用版本号 NSDict ...

  2. JAVA中关于同步与死锁的问题

    java中当多个现成同时操纵同一资源的时候需要考虑同步的问题.如车站售票,不同售票点卖同一班次车票的时候就要同步,否则卖票会有问题.下面代码模拟车站卖票: class TicketSeller imp ...

  3. Java中的大数处理类BigInteger和BigDecimar浅析

    这两个类位于java.math包内,要使用它们必须在类前面引用该包:import java.math.BigInteger;和import java.math.BigDecimal; BigInteg ...

  4. C语言实现词频统计——第二版

    原需求 1.读取文件,文件内包可含英文字符,及常见标点,空格级换行符. 2.统计英文单词在本文件的出现次数 3.将统计结果排序 4.显示排序结果 新需求: 1.小文件输入. 为表明程序能跑 2.支持命 ...

  5. Windows server 2008 下iis7 架设ftp服务器

    架设了一天的ftp服务器,终于搞定了. 按着windows server 2003的思路在windows server 2008把ftp设置好后,登录过程老是出现:530 User cannot lo ...

  6. POJ 3422 Kaka's Matrix Travels 【最小费用最大流】

    题意: 卡卡有一个矩阵,从左上角走到右下角,卡卡每次只能向右或者向下.矩阵里边都是不超过1000的正整数,卡卡走过的元素会变成0,问卡卡可以走k次,问卡卡最多能积累多少和. 思路: 最小费用最大流的题 ...

  7. Asp.net把UTF-8编码转换为GB2312编码

    系统采用的UTF-8编码,而一些支持系统使用的是GB2312编码. 不同编码的页面.脚本之间互相引用,就会产生乱码的问题,解决方法就是统一成一种编码.asp.net 中,如果要修改输出页面的编码,可以 ...

  8. spring获取bean的时候严格区分大小写

    如题:spring获取bean的时候严格区分大小写 配置文件helloservice.xml中配置: <dubbo:reference id="IInsurance" int ...

  9. 制作东皇3.2的安装U盘-黑苹果之路

    每次使用硬盘映像安装需要先装windows,制作东皇3.2安装分区,再装bootthink,再通过bootthink加载东皇3.2的分区进行安装,非常繁琐.尝试制作U盘来直接安装东皇3.2.过程如下: ...

  10. 150 Opening ASCII mode data connection. FTP连接的PASV和PORT方式

    FTP连接服务器时出现 150 Opening ASCII mode data connection.一般是客户端设置PORT 主动方式连接造成的.切换成PASV 被动模式后一般能连接上. 一.什么是 ...