【问题标题】:Asp.Net - (Sql) The connection was not closedAsp.Net - (Sql) 连接未关闭
【发布时间】:2017-05-21 20:47:16
【问题描述】:

我的网站经常遇到问题。无论我尝试什么,我都无法摆脱它。

在我的 asp.net 项目中,我使用的是 microfost azure 服务器和数据库。我一次又一次地检查了我所有的查询。之后无论我在哪里打开连接,我都会将其关闭。

此外,在我打开我的 sql 连接之前,我几乎会检查每个函数的连接状态,例如:

if (conn.State != System.Data.ConnectionState.Closed) { conn.Close(); }

如果我多次刷新我的主页,我得到了错误,大多数时候没有任何多次刷新我得到了相同的结果。

**The connection was not closed. The connection's current state is open.**

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.InvalidOperationException: The connection was not closed. The connection's current state is open.

谁能帮助我在这种情况下我能做些什么?

【问题讨论】:

  • 您还有其他联系吗?您是否在其他任何地方打开连接?
  • 您是否尝试过使用 try-catch 和调试来确定引发异常的位置?
  • @pookie 我在每个发送命令之前打开我的 sql 连接并在最后关闭它。

标签: sql asp.net connection


【解决方案1】:

该异常可能表明当您尝试打开连接时该连接已打开。您是否共享一个由不同线程上的多个进程使用的全局连接?这会导致它,也可以解释为什么问题是间歇性的。

InvalidOperationException 的文档中提到了SqlConnection.Open()

最好在每次需要时显式创建一个新连接,然后在完成后调用Dispose()。你可以打电话给Close(),但更简单的模式是using,比如

using(var connection = new SqlConnection("yourConnectionString"))
{
    connection.Open() // open it right before you execute something
}

using 语句确保始终调用Dispose()Dispose() 致电 Close()。因此,如果您按上述方式创建连接,您的连接将始终关闭。

当您Close()Dispose() 时,框架并没有真的 关闭连接。至少不是马上。它保留一个打开的连接池并重新使用它们,因为它比打开和关闭连接更有效。因此,如果您打开一个连接,关闭它,用相同的连接字符串打开另一个连接,然后关闭它,等等,很可能在幕后它实际上是完全相同的连接。但是框架正在幕后为您处理。如果未使用连接,则连接真的 会关闭。见connection pooling

因此,尽管尝试重复使用相同的SqlConnection 似乎很有效,但根据需要创建和Dispose() 并让连接池在后台管理连接的生命周期确实没问题。

【讨论】:

  • 感谢您的回答。在这种情况下,我在尝试之前还有一个问题。如果我在每次需要时使用 webconfig connectionString 并在使用 dispose 后使用它呢?
  • Web.config connectionStrings 只是一个存储连接字符串的地方,所以它不会影响连接的打开或关闭方式。
【解决方案2】:

您应该在关闭连接时仔细检查异常。

try{
    stmt.close();
    connection.close();
    connection = null;
}catch(Exception e){
    try{
        connection.close();
        connection = null;
    }catch(Exception e){
    }
}

【讨论】:

    猜你喜欢
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多