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. JS 百度地图-右键菜单

    JS 百度地图-右键菜单 /*-----------------标注右键删除-------------------------*/ var markerMenu = new BMap.ContextM ...

  2. IntelliJ IDEA Ultimate 6.2 版本免费试用期过期后如何破解

    今天早上一打开IntelliJ IDEA时弹出“InteliJ IDEA License Activation”界面,需要激活新的license才可以使用.下面直接使用Activation code进 ...

  3. 前端面试必备技巧(二)css盒模型及BFC

    CSS盒模型 基本概念:标准模型+IE模型及区别 CSS如何设置这两种模型? JS如何设置获取盒模型对应的宽和高? 实例题(根据盒模型解释边距重叠) BFC边距重叠解决方案 (1)BFC的基本概念:b ...

  4. sql 注释解释

    1 2 3 4 CREATE TABLE groups(   gid INT PRIMARY KEY AUTO_INCREMENT COMMENT '设置主键自增',   gname VARCHAR( ...

  5. ASP.NET MVC简单流程解释(传值方式)

    在上篇笔记里我们创建了一个简单的MVC程序 在view中,@Model指的就是MyFirstMvc.Models.IndexModel,我们的提交页面是/Test/Index,当我们输入完数字并按下提 ...

  6. Unable to connect to Elasticsearch at http://elasticsearch:9200. statu red Kibana 安装

    解决方案 docker run -d -p 5601:5601 --link elasticsearch -e "elasticsearch_url=容器ip:9200" --na ...

  7. asm相关内容想下载(包括 jar 包)

    网址:http://download.forge.ow2.org/asm/

  8. 理解 Oracle 多租户体系中(12c,18c,19c)Grant授权作用域范围

    本篇探讨以下几个问题:你可提前猜测下面6个场景语句中,哪几个授权可以成功执行? 1. 在CDB级别中对用户进行授权,不带 container 子句的效果: 2. 在CDB级别中对用户进行授权,带 co ...

  9. 最短路(Dijkstra,Floyd,Bellman_Ford,SPFA)

    当然,这篇文章是借鉴大佬的... 最短路算法大约来说就是有4种——Dijkstra,Floyd,Bellman_Ford,SPFA 接下来,就可以一一看一下... 1.Dijkstra(权值非负,适用 ...

  10. tensorflow-gpu安装

    添加清华源(输入清华仓库镜像),可以提高下载速度: conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/ ...