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

时间:2013-09-30 08:08:32

标签: c# asp.net

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

        conn.Open();

        try
        {
            // database querying here
        }
        finally
        {
            conn.Close();
        }

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

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

2 个答案:

答案 0 :(得分:15)

可能是您未处理的try块中抛出异常。请参阅MSDN中的try-finally

  

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

我建议将连接包装在using块中:

using (SqlConnection connection = new SqlConnection(connectionString))
{
     //etc...
}

或者,在try-finally

中添加一个catch块
    conn.Open();

    try
    {

    }
    catch
    {

    }
    finally
    {
        conn.Close();
    }

答案 1 :(得分:2)

您应该在操作完成后立即关闭连接。尝试尽可能短的时间打开连接。 但是最好使用使用,即使出现异常,它也会调用Dispose方法。

using (SqlConnection conn= new SqlConnection(conStr))
{
     //etc...
}

1)打开连接

2)访问数据库

3)关闭连接

 //conn.Open();

        try
        {
          conn.Open();
          //Your Code

        }
        finally
        {
           conn.Close();   
           conn.Dispose();//Do not call this if you want to reuse the connection
        }