连接未关闭,连接的当前状态已打开

use*_*395 10 c# asp.net

我正在编写一个ASP.NET应用程序.在我的数据层中,在查询之前和之后正在打开和关闭sql连接.SqlConnection被保存为单个类的私有字段.类中的每个数据库调用都使用相同的结构:

        conn.Open();

        try
        {
            // database querying here
        }
        finally
        {
            conn.Close();
        }
Run Code Online (Sandbox Code Playgroud)

然而,在非常罕见的情况下,我得到了例外情况'连接没有关闭.连接的当前状态是打开的.由于它很少来自代码的不同部分,因此无法重现该问题.我的应用程序中涉及一些线程,但新线程也会创建新的数据层类,从而创建新的连接对象.

我不明白如何使用上面的代码使连接保持打开状态.打开后是否应始终关闭连接,以免发生上述异常?

DGi*_*bbs 15

很可能是try您正在处理的块中抛出异常.有关try-finally的信息,请参阅MSDN中的此注释:

在处理的异常中,保证运行关联的finally块.但是,如果未处理异常,则finally块的执行取决于如何触发异常展开操作.

using无论如何,我建议将连接包装在一个块中:

using (SqlConnection connection = new SqlConnection(connectionString))
{
     //etc...
}
Run Code Online (Sandbox Code Playgroud)

或者,在以下位置添加一个catch块try-finally:

    conn.Open();

    try
    {

    }
    catch
    {

    }
    finally
    {
        conn.Close();
    }
Run Code Online (Sandbox Code Playgroud)