SqlDataReader阅读器关闭时尝试调用 HasRows 无效

原创长白山上放羊娃 发布于2018-07-25 00:29:27 阅读数 538  收藏

在SqlHelper中封装好的SqlDataReader在调用时出现了

“阅读器关闭时尝试调用 HasRows 无效”

调试了许多次,提示的都是SqlHelper中错误

但我以为是代码出错误,但是后来才发现是因为封装的方法有问题

  1.  
    public static SqlDataReader ExecuteReader(string sql, params SqlParameter[] param)
  2.  
    {
  3.  
    //声明连接
  4.  
    using (SqlConnection Coon = new SqlConnection(SqlCoon))
  5.  
    {
  6.  
     
  7.  
    //声明命令
  8.  
    using (SqlCommand cmd = new SqlCommand(sql, Coon))
  9.  
    {
  10.  
    //打开数据库
  11.  
    if (Coon.State == ConnectionState.Closed)
  12.  
    {
  13.  
    Coon.Open();
  14.  
    }
  15.  
    //判断可变参数
  16.  
    if (param != null && param.Length > 0)
  17.  
    {
  18.  
    cmd.Parameters.AddRange(param);
  19.  
    }
  20.  
    //执行命令
  21.  
    return cmd.ExecuteReader(CommandBehavior.CloseConnection);
  22.  
    }
  23.  
    }
  24.  
    }

仔细看是因为在连接字段前加了释放空间的using

因为using作用域之后,连接自动释放,而Reader与DataSet不同,DataSet对象是一个暂存区(Cache)保留了数据库中查到的数据,而DataReader并没有将数据保存在本地内存中,这些数据是存在数据库服务器中的,连接关闭后用DataReader读取数据库就一定是读不到的。

修改后的封装方法

  1.  
    public static SqlDataReader ExecuteReader(string sql, params SqlParameter[] param)
  2.  
    {
  3.  
    //声明连接
  4.  
    SqlConnection Coon = new SqlConnection(SqlCoon);
  5.  
     
  6.  
    //声明命令
  7.  
    using(SqlCommand cmd = new SqlCommand(sql, Coon))
  8.  
    {
  9.  
    //打开数据库
  10.  
    if (Coon.State == ConnectionState.Closed)
  11.  
    {
  12.  
    Coon.Open();
  13.  
    }
  14.  
    //判断可变参数
  15.  
    if (param != null && param.Length > 0)
  16.  
    {
  17.  
    cmd.Parameters.AddRange(param);
  18.  
    }
  19.  
    //执行命令
  20.  
    return cmd.ExecuteReader(CommandBehavior.CloseConnection);
  21.  
    }
  22.  
    }

SqlDataReader阅读器关闭时尝试调用 HasRows 无效的更多相关文章

  1. 编写SqlHelper使用,在将ExecuteReader方法封装进而读取数据库中的数据时会产生Additional information: 阅读器关闭时尝试调用 Read 无效问题,解决方法与解释

    在自学杨中科老师的视频教学时,拓展编写SqlHelper使用,在将ExecuteReader方法封装进而读取数据库中的数据时 会产生Additional information: 阅读器关闭时尝试调用 ...

  2. SqlDataReader的关闭问题,报错:“阅读器关闭时尝试调用 Read 无效”

    SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);//关闭SqlDataReader 会自动关闭Sqlconn ...

  3. PDF阅读器关闭“使用手型工具阅读文章”功能

    1.问题描述 某些PDF文件打开时,光标显示的手型工具里面有个箭头,一点击鼠标左键,就跳转到下一页了.给阅读带来很多不便. 2.原因 因为这类PDF文档中带有"文章"(articl ...

  4. C#与数据库访问技术总结(十一)之数据阅读器(DataReader)1

    数据阅读器 当执行返回结果集的命令时,需要一个方法从结果集中提取数据. 处理结果集的方法有两个: 第一,使用数据阅读器(DataReader): 第二,同时使用数据适配器(Data Adapter)和 ...

  5. C#使用SqlDataReader读取数据库数据时CommandBehavior.CloseConnection参数的作用

    主要用在ExecuteReader(c)中,如果想要返回对象前不关闭数据库连接,须要用CommandBehavior.CloseConnection: CloseConnection解决了流读取数据模 ...

  6. 菜鸟的数据库实战-4-数据阅读器SqlDataReader

    老铁们大家好啊,我是菜鸟思奎,今天我学习的是数据库和前端的连接用到的字符串,如果有什么纰漏希望大家在评论区指正.阿里嘎多. 我的环境是Visual Studio 2008 + Microsoft SQ ...

  7. 刷新或关闭时调用onbeforeunload

    Onunload,onbeforeunload都是在刷新或关闭时调用,可以在<script>脚本中通过window.onunload来指定或者在<body>里指定.区别在于on ...

  8. C#与数据库访问技术总结(十二)数据阅读器(DataReader)2

    遍历数据阅读器中的记录 当ExecuteReader方法返回DataReader对象时,当前光标的位置在第一条记录的前面. 必须调用阅读器的Read方法把光标移动到第一条记录,然后,第一条记录将变成当 ...

  9. 基于JSP的RSS阅读器的设计与实现

    阅读器访问地址:http://easyrss.tk/,欢迎体验! 阅读导览 一.    概述  二.    设计的基本概念和原理 三.    设计方案 四.    主要源代码 五.    阅读器使用说 ...

随机推荐

  1. include=FALSE的作用

    每次都会加载很多的包,会显示很多没用的信息,特别是那个spdep. 例如: {r include=FALSE} library(plm) library(tseries) library(zoo) l ...

  2. 假期学习【十一】Python爬取百度词条写入csv格式 python 2020.2.10

    今天主要完成了根据爬取的txt文档,从百度分类从信息科学类爬取百度词条信息,并写入CSV格式文件. txt格式文件如图: 为自己爬取内容分词后的结果. 代码如下: import requests fr ...

  3. 异常处理_python

    一.异常处理格式: name=[1,2]data={}try: name[3] data['name']except (KeyError,IndexError) as e : #捕捉指定的几个错误类型 ...

  4. 2020年,最新NGINX的ngx_http_geoip2模块以精准禁止特定国家或者地区IP访问

    1.0 geoip2核心识别库 安装geoip2 lib步骤: cd /usr/local/src .tar.gz wget https://github.com/maxmind/libmaxmind ...

  5. 项目部署到tomcat,验证部署成功

    1.假设你已经知道打war包放上去了tomcat 下的webapps下 2. bin->启动startup.bat 3.浏览器中启动 http://ip:port    这个port是tomca ...

  6. Learn from Niu

    创新的源头来自于思考,尤其是深度思考: 1. 读博过程必然会经历痛苦,思考,深度思考这么一个过程,其中思考是最重要的,尤其是深度思考. 思考之后才是创新. 2. 借用其他的知识弥补这个领域的知识,不简 ...

  7. npm 升级到最新版本

    先npm -v查看自己的npm 是否是最新版本,如果不是则进入安装node的文件夹,可通过 where node 查找该文件夹. 进入之后使用: npm i npm -g 之后使用: npm -v 查 ...

  8. Linux系统初学者的常见问题解决集结大全

    http://www.embeddedlinux.org.cn/html/xinshourumen/200809/22-86.html 一. 如何建立多用户 提醒大家一句,别一直使用root用户,因为 ...

  9. 开发过程中遇到的代理Proxy配置问题

    proxy代理问题 在公司不能访问外网的时候,使用IDEA开发.. 需要配置IDEA Proxy Maven Git IDEA开发工具Proxy配置,使用Spring Boot快读构建工具 Maven ...

  10. C# 读取webConfig配置

    获取百度URL  var url = System.Configuration.ConfigurationManager.AppSettings["BaiduUrl"]; < ...