使用ExecuteReader时报错“阅读器关闭时尝试调用Read无效”的解决办法

使用ExecuteReader时报错“阅读器关闭时尝试调用Read无效”的解决办法出现如下绿色字体出错的问题,是由于using使用过后数据库会自动关闭,出了using的作用域后,在调用的时候无法找到信息form1.cs        publicstaticSqlDataReaderExecuteReader(stringsql,paramsSqlParameter[]parameters)    {      stringconnStr…

大家好,又见面了,我是你们的朋友全栈君。

出现如下绿色字体出错的问题,是由于using使用过后数据库会自动关闭,出了using的作用域后,在调用的时候无法找到信息

form1.cs
        public static SqlDataReader ExecuteReader(string sql, params SqlParameter[] parameters)
        {
            string connStr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;
                    foreach (SqlParameter parameter in parameters)
                    {
                        cmd.Parameters.Add(parameter);
                    }
                    return cmd.ExecuteReader();
                }                
            }  
        }
DBHelper.cs
        private void button2_Click(object sender, EventArgs e)
        {
            SqlDataReader reader = DBHelper.ExecuteReader("select * from T_Person");
            while (reader.Read ())
            {
                string name = reader.GetString(reader.GetOrdinal("Name"));
                MessageBox.Show(name);
            }
        }

改:将Using去掉,用手动打开open、关闭close,用cmd.ExecuteReader(CommandBehavior.CloseConnection)

form1.cs

public static SqlDataReader ExecuteReader(string sql, params SqlParameter[] parameters)
        {
            string connStr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;
            SqlConnection conn = new SqlConnection(connStr);
            conn.Open();
            SqlCommand cmd = conn.CreateCommand();
            cmd.CommandText = sql;
            foreach (SqlParameter parameter in parameters)
            {
                cmd.Parameters.Add(parameter);
            }
            return cmd.ExecuteReader(CommandBehavior.CloseConnection);

        }

DBHelper.cs

        private void button2_Click(object sender, EventArgs e)
        {
            SqlDataReader reader = DBHelper.ExecuteReader("select * from T_Person");
            while (reader.Read ())
            {
                string name = reader.GetString(reader.GetOrdinal("Name"));
                MessageBox.Show(name);
            }
        }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/151508.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • java8 stream接口终端操作 count,anyMatch,allMatch,noneMatch

    java8 stream接口终端操作 count,anyMatch,allMatch,noneMatch对于中间操作和终端操作的定义,请看《JAVA8stream接口中间操作和终端操作》,这篇主要讲述的是stream的count,anyMatch,allMatch,noneMatch操作,我们先看下函数的定义longcount();booleananyMatch(Predicate<?superT>predicate);…

  • sql删除或清空表数据[通俗易懂]

    sql删除或清空表数据[通俗易懂]sql删除或清空表数据一、sql清空表数据的三种方式:二、语法一、sql清空表数据的三种方式:我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:1、truncate–删除所有数据,保留表结构,不能撤销还原2、delete–是逐行删除速度极慢,不适合大量数据删除3、drop–删除表,数据和表结构一起删除,快速二、语法truncatetable表名deletefrom表名deletefrom表

  • 【数据结构】单链表上的基本运算

    【数据结构】单链表上的基本运算【数据结构】单链表上的基本运算

  • 汇编指令(四)移位指令

    汇编指令(四)移位指令学习概要格式移位指令主要分四种一、逻辑移位指令1.逻辑左移指令SHL2.逻辑右移指令SHR3.逻辑移位指令的功能二、算术移位指令1.算术左移指令SAL2.算术右移指令SAR最高位不变的意思就是,最高位原来是1(0),右移过后最高位就补1(0)。3.算术移位指令的功能三、循环移位指令1.循环左移指令ROL2.循环右移指令ROR四、带进位的循环移位指令1.带进位的循环左移指令RCL2.带进位的循环右移指令移位指令对标志位的影响1

  • treeTable v 1.4.2

    treeTable v 1.4.2treeTablev1.4.2简介treeTable是跨浏览器、性能很高的jquery的树表组件,它使用非常简单,只需要引用jquery库和一个js文件,接口也很简单。优点兼容主流浏览器:支持IE6和IE6+,Firefox,chrome,Opera,Safari接口简洁:在普通表格的基础上增加父子关系的自定义标签就可以组件性能高:内部实现了只绑

  • Eurake配置心得

    Eurake配置心得server:port:10086spring:application:name:ly-registryeureka:client:fetch-registry:falseregister-with-eureka:falseservice-url:defaultZone:http://127.0.0.1:${se…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号