SqlDataReader阅读器关闭时尝试调用 HasRows 无效
在SqlHelper中封装好的SqlDataReader在调用时出现了
“阅读器关闭时尝试调用 HasRows 无效”
调试了许多次,提示的都是SqlHelper中错误
但我以为是代码出错误,但是后来才发现是因为封装的方法有问题
- public static SqlDataReader ExecuteReader(string sql, params SqlParameter[] param)
- {
- //声明连接
- using (SqlConnection Coon = new SqlConnection(SqlCoon))
- {
- //声明命令
- using (SqlCommand cmd = new SqlCommand(sql, Coon))
- {
- //打开数据库
- if (Coon.State == ConnectionState.Closed)
- {
- Coon.Open();
- }
- //判断可变参数
- if (param != null && param.Length > 0)
- {
- cmd.Parameters.AddRange(param);
- }
- //执行命令
- return cmd.ExecuteReader(CommandBehavior.CloseConnection);
- }
- }
- }
仔细看是因为在连接字段前加了释放空间的using
因为using作用域之后,连接自动释放,而Reader与DataSet不同,DataSet对象是一个暂存区(Cache)保留了数据库中查到的数据,而DataReader并没有将数据保存在本地内存中,这些数据是存在数据库服务器中的,连接关闭后用DataReader读取数据库就一定是读不到的。
修改后的封装方法
- public static SqlDataReader ExecuteReader(string sql, params SqlParameter[] param)
- {
- //声明连接
- SqlConnection Coon = new SqlConnection(SqlCoon);
- //声明命令
- using(SqlCommand cmd = new SqlCommand(sql, Coon))
- {
- //打开数据库
- if (Coon.State == ConnectionState.Closed)
- {
- Coon.Open();
- }
- //判断可变参数
- if (param != null && param.Length > 0)
- {
- cmd.Parameters.AddRange(param);
- }
- //执行命令
- return cmd.ExecuteReader(CommandBehavior.CloseConnection);
- }
- }
SqlDataReader阅读器关闭时尝试调用 HasRows 无效的更多相关文章
- 编写SqlHelper使用,在将ExecuteReader方法封装进而读取数据库中的数据时会产生Additional information: 阅读器关闭时尝试调用 Read 无效问题,解决方法与解释
在自学杨中科老师的视频教学时,拓展编写SqlHelper使用,在将ExecuteReader方法封装进而读取数据库中的数据时 会产生Additional information: 阅读器关闭时尝试调用 ...
- SqlDataReader的关闭问题,报错:“阅读器关闭时尝试调用 Read 无效”
SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);//关闭SqlDataReader 会自动关闭Sqlconn ...
- PDF阅读器关闭“使用手型工具阅读文章”功能
1.问题描述 某些PDF文件打开时,光标显示的手型工具里面有个箭头,一点击鼠标左键,就跳转到下一页了.给阅读带来很多不便. 2.原因 因为这类PDF文档中带有"文章"(articl ...
- C#与数据库访问技术总结(十一)之数据阅读器(DataReader)1
数据阅读器 当执行返回结果集的命令时,需要一个方法从结果集中提取数据. 处理结果集的方法有两个: 第一,使用数据阅读器(DataReader): 第二,同时使用数据适配器(Data Adapter)和 ...
- C#使用SqlDataReader读取数据库数据时CommandBehavior.CloseConnection参数的作用
主要用在ExecuteReader(c)中,如果想要返回对象前不关闭数据库连接,须要用CommandBehavior.CloseConnection: CloseConnection解决了流读取数据模 ...
- 菜鸟的数据库实战-4-数据阅读器SqlDataReader
老铁们大家好啊,我是菜鸟思奎,今天我学习的是数据库和前端的连接用到的字符串,如果有什么纰漏希望大家在评论区指正.阿里嘎多. 我的环境是Visual Studio 2008 + Microsoft SQ ...
- 刷新或关闭时调用onbeforeunload
Onunload,onbeforeunload都是在刷新或关闭时调用,可以在<script>脚本中通过window.onunload来指定或者在<body>里指定.区别在于on ...
- C#与数据库访问技术总结(十二)数据阅读器(DataReader)2
遍历数据阅读器中的记录 当ExecuteReader方法返回DataReader对象时,当前光标的位置在第一条记录的前面. 必须调用阅读器的Read方法把光标移动到第一条记录,然后,第一条记录将变成当 ...
- 基于JSP的RSS阅读器的设计与实现
阅读器访问地址:http://easyrss.tk/,欢迎体验! 阅读导览 一. 概述 二. 设计的基本概念和原理 三. 设计方案 四. 主要源代码 五. 阅读器使用说 ...
随机推荐
- JS 百度地图-右键菜单
JS 百度地图-右键菜单 /*-----------------标注右键删除-------------------------*/ var markerMenu = new BMap.ContextM ...
- IntelliJ IDEA Ultimate 6.2 版本免费试用期过期后如何破解
今天早上一打开IntelliJ IDEA时弹出“InteliJ IDEA License Activation”界面,需要激活新的license才可以使用.下面直接使用Activation code进 ...
- 前端面试必备技巧(二)css盒模型及BFC
CSS盒模型 基本概念:标准模型+IE模型及区别 CSS如何设置这两种模型? JS如何设置获取盒模型对应的宽和高? 实例题(根据盒模型解释边距重叠) BFC边距重叠解决方案 (1)BFC的基本概念:b ...
- sql 注释解释
1 2 3 4 CREATE TABLE groups( gid INT PRIMARY KEY AUTO_INCREMENT COMMENT '设置主键自增', gname VARCHAR( ...
- ASP.NET MVC简单流程解释(传值方式)
在上篇笔记里我们创建了一个简单的MVC程序 在view中,@Model指的就是MyFirstMvc.Models.IndexModel,我们的提交页面是/Test/Index,当我们输入完数字并按下提 ...
- 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 ...
- asm相关内容想下载(包括 jar 包)
网址:http://download.forge.ow2.org/asm/
- 理解 Oracle 多租户体系中(12c,18c,19c)Grant授权作用域范围
本篇探讨以下几个问题:你可提前猜测下面6个场景语句中,哪几个授权可以成功执行? 1. 在CDB级别中对用户进行授权,不带 container 子句的效果: 2. 在CDB级别中对用户进行授权,带 co ...
- 最短路(Dijkstra,Floyd,Bellman_Ford,SPFA)
当然,这篇文章是借鉴大佬的... 最短路算法大约来说就是有4种——Dijkstra,Floyd,Bellman_Ford,SPFA 接下来,就可以一一看一下... 1.Dijkstra(权值非负,适用 ...
- tensorflow-gpu安装
添加清华源(输入清华仓库镜像),可以提高下载速度: conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/ ...