SqlDataReader实例 HasRows属性与 Read()方法
来源:互联网 发布:日晷怎么看时间 知乎 编辑:程序博客网 时间:2024/06/02 03:31
声明:SqlDataReader 提供一种从 SQL Server 数据库读取行的只进流的方式。无法继承此类。
我在编写一个小程序时遇到一个小问题:
使用SqlDataReader实例reader的HasRows判断数据流中是否存在数据,进而执行数据的输出操作,其中用到代码如下
SqlDataReader reader = Command.ExecuteReader();
while(reader.HasRows)
{
reader.Read();
qx_Str = reader[0].ToString(); //出错位置
}
reader.Close();
sqlcon.Close();
运行后在红色位置报错:在没有任何数据时进行无效的读取尝试
出现这种情况很明显是读取器运行到的位置无数据流,无法执行数据的输出
这时确定判断是while处的判断条件有误,在MSDN文档中查询到:
HasRows属性
// HasRows 获取一个值,该值指示 System.Data.SqlClient.SqlDataReader 是否包含一行或多行。
原来是出在HasRows的使用上,只要SqlDataReader存在数据流(数据流不为空)则返回的bool值为真,这样的话,这个循环总执行(难怪使用try ..catch 假死)。数据为空时,read[0]读取数据时,则会出现错误!
那么如何避免出现该错误呢,仍然是用HasRows属性?
可以想到只需利用if语句取消循环状态!!
那么要用while怎么办呢?使用SqlDataReader实例的Read()方法,对!
让我们认识一下Read()方法:
// 摘要: 使 System.Data.SqlClient.SqlDataReader 前进到下一条记录。
// 返回结果: 如果存在多个行,则为 true;否则为 false。
则只需将reader.Read()替换reader.HasRows执行循环,为什么行呢?
SqlDataReader的默认位置在[第一条记录前面]。因此,必须调用 Read 来开始访问任何数据。
Read()为前进到下一条记录。当循环执行到Read()无数据时,则循环结束!!不过还要将循环里的Read()去掉,则每循环一次前进了两行数据。
- SqlDataReader实例 HasRows属性与 Read()方法
- SqlDataReader实例 HasRows属性与 Read()方法
- SqlDataReader的Read方法
- SqlDataReader 中的read 方法是什么意思?
- hasrows
- SqlDataReader的关闭问题,报错:“阅读器关闭时尝试调用 HasRows 无效”
- 获取sqlDataReader对象Read()方法读取流的字段值的四种方法
- 静态方法(属性)与实例方法(属性)
- Python:类属性,实例属性,私有属性与静态方法,类方法,实例方法
- Python:类属性,实例属性,私有属性与静态方法,类方法,实例方法
- Python:类属性,实例属性,私有属性与静态方法,类方法,实例方法
- 第17节 实例属性与方法
- java属性与方法的调用实例
- read与write方法
- javascript 类属性、类方法、类实例、实例属性、实例方法、prototype、__proto__ 测试与小结
- 当SqlDataReader.Read()少一条记录时
- 当SqlDataReader.Read()少一条记录时
- 实例变量与属性:私有变量与私有方法
- java中this 和super比较
- struts2学习的截图
- MongoDb 分页 SpringDataPageable MongoRepository
- Floyd算法 最外层 迭代顺序 关系
- 安装与学习laravel
- SqlDataReader实例 HasRows属性与 Read()方法
- Python之模块
- solr DataImportHandler 导入数据
- Circos 教程___001
- Zookeeper开源客户端框架Curator简介
- JS数组原理
- 去除按钮外边框
- call和apply
- C++ 模版类 详细讲解