c# – ”ExecuteReader需要一个开放且可用的连接.连接的当前状态是打开的’

c# – ”ExecuteReader需要一个开放且可用的连接.连接的当前状态是打开的’,第1张

概述用C#编写的一个相当大的Web应用程序不断抛出2个错误: ‘ExecuteReader需要一个开放且可用连接.连接的当前状态是打开的. 和 ‘读取器关闭时无效尝试调用Read. 这些错误是偶然的 – 用于在95%的时间内加载精细的页面,但最近它们变得流行,它们一直在发生并且基本上削弱了应用程序的功能. Web应用程序高度依赖于MS SQL数据库,并且错误似乎不仅限于一个页面,而是几乎所有连接到数 用C#编写的一个相当大的Web应用程序不断抛出2个错误:

‘ExecuteReader需要一个开放且可用的连接.连接的当前状态是打开的.

‘读取器关闭时无效尝试调用Read.

这些错误是偶然的 – 用于在95%的时间内加载精细的页面,但最近它们变得流行,它们一直在发生并且基本上削弱了应用程序的功能.

Web应用程序高度依赖于MS sql数据库,并且错误似乎不仅限于一个页面,而是几乎所有连接到数据库的页面.

查询按如下方式执行:

Database.open(); // Custom class that has our connection string hard coded.string query = "SELECT * FROM table"; // (dummy query)sqlCommand command = new sqlCommand(query,Database.Conn);sqlDataReader reader = null;try {    reader = command.ExecuteReader(CommandBehavIoUr.CloseConnection);    if (reader.HasRows) {        while (reader.Read()) {            // Do something with the data.        }   }    reader.Close();}catch (Exception e) {    throw new Exception(e.Message);}finally {    if (reader != null) {        reader.Close();    }}

我在网上研究过这些错误,并且我已经看到了一些我试过无用的潜在解决方案:

将代码的各个部分放在using()块中.
为阅读器指定CommandBehavIoUr.CloseConnection.
检查MARS是否已启用.
确保每次都创建新的连接对象.

我花了很长时间寻找解决方案,更不用说长时间试图让它起作用了,而我现在几乎要把头发拉出来了!

请帮忙!

编辑 – 修复了问题,请参阅注释部分.

解决方法 除了 leppie的 answer之外,您还应该使用任何Idisposable类型的dispose():
try        {            Database.open(); // Custom class that has our connection string hard coded.            string query = "SELECT * FROM table"; // (dummy query)            using (sqlCommand command = new sqlCommand(query,Database.Conn))            using (sqlDataReader reader = command.ExecuteReader(CommandBehavIoUr.CloseConnection))            {                if (reader.HasRows)                {                    while (reader.Read())                    {                        // Do something with the data.                    }                }            }        }        catch (Exception e)        {            throw new Exception(e.Message);        }
总结

以上是内存溢出为你收集整理的c# – ”ExecuteReader需要一个开放且可用的连接.连接的当前状态是打开的’全部内容,希望文章能够帮你解决c# – ”ExecuteReader需要一个开放且可用的连接.连接的当前状态是打开的’所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1249916.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存