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. react-路由和Ant design

    路由的使用 react-router import React from 'react' // 如果要使用 路由模块,第一步,运行 yarn add react-router-dom // 第二步,导 ...

  2. 如何在Windows上开启Ping或者禁止PING

    方法1:命令行模式 进入服务器后 点击 开始——运行 输入命令: netsh firewall set icmpsetting 8 这样就可以在外部ping到服务器了 非常简单实用! 同样道理,如果想 ...

  3. 菜鸟教程 Missing parentheses in call to 'print'

    个人博客 地址:http://www.wenhaofan.com/article/20180618180327 >>> print "hello" SyntaxE ...

  4. 巨杉数据库入选年度Gartner Peer Insights报告,获得市场高度评价

    Gartner Peer Insights 年度评选结果于近日出炉,在数据库管理系统市场报告中,巨杉数据库获得了总平均分4.7(满分5分)的成绩,在众多国际厂商中位居第三,是国内唯一一家入选的数据库厂 ...

  5. dijkstra算法为什么不能处理带有负边权的图

      1 2 3 1 0 8 9 2 10 0 10 3 10 -2 0 先看样例再解释,看邻接矩阵会发现, 如果用dijkstra算1-2的最短路因为贪心思想所以得到的结果是8,但明显可以看到1-3- ...

  6. Centos7 入门几个操作

    http://www.wallcopper.com/linux/1650.html 创建文件软连接 ln -s 源路径 目标路径 查看软连接ls -il 服务操作:systemctl start fo ...

  7. Weighted Visibility Graph With Complex Network Features in the Detection of Epilepsy

    Their data five data set, 100 single channel of EEG signals, each channel EEG has 4097 data point. t ...

  8. open函数 文件设置缓冲

    # 注释 将文件写入硬件设备时,使用系统调用,这类I/O操作一般时间很长 # 为了减少I/O次数操作,文件通常使用缓冲区(有足够的数据才进行系统调用) # 文件缓冲行为分为: # 全缓冲: open函 ...

  9. Unity 坐标系转换

    在Unity中我们通常会用到以下几个坐标系下的点: 世界坐标系:World Space 简单来讲,我们通过 transform.position | transform.rotation 获取得到的位 ...

  10. 解决windows10 OBS Studioobsstudio显示器捕获黑屏

    前提设置显卡,下载OBS studio 64bit别下载32bit了 如果电脑desktop右键无法显示NAVIDIA  控制面板则需要win+R  输入 msconfig选取服务,勾选所有NAIVI ...