连接不会像它应该关闭

时间:2014-06-10 12:49:19

标签: c# asp.net sqlconnection

我在ASP项目中遇到以下错误:

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

在SqlConnection对象上调用.open()函数时。

我试过这个:

    if (Conn.State != ConnectionState.Closed)
    {
        Log.Message(xxx);
        try
        {
            Conn.Close();
        }
        catch (Exception ex)
        {
            Log.Error(xxxx);
        }
    }
    Conn.Open();

但这仍然会引发错误。 Conn对象声明为:

private static readonly SqlConnection Conn = new SqlConnection(xxxx);

知道我应该在哪里寻找解决方案

3 个答案:

答案 0 :(得分:7)

这是模式。

using(var conn = new SqlConnection(connectionString))
using(var cmd = new SqlCommand(someSql, conn)
{
    conn.Open();
    cmd.ExecuteNonQueryOrWhatevs();
}
  1. 创建连接
  2. 打开连接
  3. 处置您的连接
  4. 不要试图重复使用它。只需获取它,使用它,并尽快处理它。

    此外,这些都不是线程安全的,因此不要从不同的线程触及上述任何实例。请使用一个线程来连接。随意使用多个线程来处理结果。

答案 1 :(得分:1)

要确保始终关闭连接,请打开using块内部的连接,如以下代码片段所示。这样做可确保在代码退出块时自动关闭连接。

using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    // Do work here; connection closed on following line.
}

答案 2 :(得分:0)

关闭连接和处置对象的最佳方法是“最后”你应该去做。 或者更好地使用用于处理所有对象和关闭连接,请参阅下面的代码段

public void run_runcommand(string query)   
{
    using(var con = new SqlConnection(connectionString))
    {
        using(var cmd = new SqlCommand(query, con))
        {
            con.Open();
            // ...
        }
   }       // close not needed since dispose also closes the connection
}