zoukankan      html  css  js  c++  java
  • SqlDataReader阅读器关闭时尝试调用 HasRows 无效

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

    在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.  
      }
  • 相关阅读:
    四、单片机学习——矩阵键盘实验
    二、单片机学习——独立按键实验
    三、单片机学习——数码管实验(共阳)
    一、单片机学习——流水灯实验
    Cacti监控Linux安装配置snmp服务
    firewalld和iptables区别
    Zabbix图形界面乱码修复为中文显示
    Centos7安装Zabbix 5.0 LTS 版本安装(详细版)
    Ubuntu Server 18.04 网络配置
    linux下开启root用户远程登录,允许无密码登录
  • 原文地址:https://www.cnblogs.com/wfy680/p/12044565.html
Copyright © 2011-2022 走看看