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 ...
随机推荐
- android之location03
private class ButtonListener implements OnClickListener { @Override public void onClick(View v) { // ...
- mongodb的python接口pymongo使用
1. 连接 from pymongo import MongoClient client = MongoClient("mongodb://mongodb0.example.net:2701 ...
- iOS推送通知的实现步骤
一.关于推送通知 来源:http://blog.csdn.net/enuola/article/details/8627283 推送通知,也被叫做远程通知,是在iOS 3.0以后被引入的功能.是当程序 ...
- sql server中的锁 事务锁 更新锁 保持锁 共享锁 你知道吗?
锁定数据库的一个表 SELECT * FROM table WITH (HOLDLOCK) 注意: 锁定数据库的一个表的区别 SELECT * FROM table WITH (HOLDLOCK) 其 ...
- C++学习32 重载new和delete运算符
内存管理运算符 new.new[].delete 和 delete[] 也可以进行重载,其重载形式既可以是类的成员函数,也可以是全局函数.一般情况下,内建的内存管理运算符就够用了,只有在需要自己管理内 ...
- 封装一个简单好用的打印Log的工具类And快速开发系列 10个常用工具类
快速开发系列 10个常用工具类 http://blog.csdn.net/lmj623565791/article/details/38965311 ------------------------- ...
- hdu 4712 Hamming Distance(随机数法)
d.汉明距离是使用在数据传输差错控制编码里面的,汉明距离是一个概念,它表示两个(相同长度)字对应位不同的数量, 我们以d(x,y)表示两个字x,y之间的汉明距离.对两个字符串进行异或运算,并统计结果为 ...
- java使用jacob将office转pdf
1.此处代码是把office文档转换成pdf的工具类,在BS架构的产品中,我们可以使用基于JS的pdf插件显示pdf文档,但是前提IE需要按照adobe的pdf软件,对于非IE不用安装.2.可以基于f ...
- 稀疏矩阵乘法加法等的java实现
原创声明:本文系作者原创,转载请写明出处. 一.前言 前几天由于科研需要,一直在搞矩阵的稀疏表示的乘法,不过最近虽然把程序写出来了,还是无法处理大规模的矩阵(虽然已经是稀疏了).原因可能是 ...
- 使用Spring的Property文件存储测试数据 - 编写测试和调用测试数据
准备好测试数据后,我们可以开始编写测试了,在测试用例中调用我们property文件中的测试数据. 我自己写了一个TestCase作为所有测试类基类,基类中定义了两个变量来代表之前建好的两个测试数据文件 ...