ADO.NET中的DataReader详解
使用特性
原理图

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详解的更多相关文章
- ADO.NET中的Connection详解
连接字符串 1.写法一 "Data Source=服务器名; Initial Catalog=数据库; User ID =用户名; Password=密码; Charset=UTF8; &q ...
- ADO.NET中的Command详解
Command方法介绍 1.ExecuteNonQuery 对于Update.Insert.Delete执行并返回受影响行数 对于其他语句返回 -1 2.ExecuteScalar 执行查询.并返回结 ...
- Asp.net中GridView使用详解(很全,很经典 转来的)
Asp.net中GridView使用详解 效果图参考:http://hi.baidu.com/hello%5Fworld%5Fws/album/asp%2Enet中以gv开头的图片 l ...
- Asp.net中GridView使用详解(引)【转】
Asp.net中GridView使用详解(引) GridView无代码分页排序 GridView选中,编辑,取消,删除 GridView正反双向排序 GridView和下拉菜单DropDownList ...
- Asp.net中GridView使用详解(很全,很经典)
http://blog.csdn.net/hello_world_wusu/article/details/4052844 Asp.net中GridView使用详解 效果图参考:http://hi.b ...
- php中关于引用(&)详解
php中关于引用(&)详解 php的引用(就是在变量或者函数.对象等前面加上&符号) 在PHP 中引用的意思是:不同的变量名访问同一个变量内容. 与C语言中的指针是有差别的.C语言中的 ...
- JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解
二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...
- AngularJS select中ngOptions用法详解
AngularJS select中ngOptions用法详解 一.用法 ngOption针对不同类型的数据源有不同的用法,主要体现在数组和对象上. 数组: label for value in a ...
- 【转载】C/C++中extern关键字详解
1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 也就是说extern ...
随机推荐
- netty中LengthFieldBasedFrameDecoder的使用
在org.jboss.netty.handler.codec.frame包中,有LengthFieldBasedFrameDecoder类用来解析带有长度属性的包,只要我们在传输协议中加入包的总长度就 ...
- webstrom插件:如何设置才能让webstrom能提示bootstrap的语法
<link href="bootstrap.min.css" rel="stylesheet"> <link href="boots ...
- SQL 去特殊字符
)) ) as begin declare @i int while patindex('%[^%@+*,=../_ <>''" ^0-9 ^a-Z ^''- ^吖-座]%' , ...
- [SQL]SQL语言入门级教材_SQL语言快速入门(五)
SQL语言快速入门(一) SQL是英文Structured Query Language的缩写,意思为结构化查询语言. SQL语言的主要功能就是同各种数据库建立联系,进行沟通.按照ANSI(美国国家标 ...
- Mingyang.net:Controller必需是public吗?
通常定义Controller时一般都定义成public: package net.mingyang.modules.system; @Controller @RequestMapping(" ...
- POJ 2352 【树状数组】
题意: 给了很多星星的坐标,星星的特征值是不比他自己本身高而且不在它右边的星星数. 给定的输入数据是按照y升序排序的,y相同的情况下按照x排列,x和y都是介于0和32000之间的整数.每个坐标最多有一 ...
- locals()函数访问当前还在作用范围内的局部变量
>>> element = 'silver' >>> number = 47 >>> 'Element {number} is {element} ...
- x86_64平台编译链接汇编程序
assemble: nasm -f elf32 sample.asm -l sample.lst link: ld -m elf_i386 -o test sample.o io.o
- VS2010 MSDN配置
安装VS2010之后总是要装MSDN的,不然写起程序来还真不方便.前段时间换了电脑后,折腾了好久才把VS和MSDN装好,所以为了方便自己和别人特地把配置MSDN的详细步骤写出来: 1. ...
- 从AlphaGo谈通用型人工智能设计
最近赢了人机大战的AlphaGo火了,火得一塌糊涂,圈里圈外,是人都在谈AlphaGo.但是AlphaGo毕竟是为特定场景特定应用设计的特定型人工智能,和通用型人工智能还是有很大差别,离人工智能普及更 ...