一尘不染

为什么总是关闭数据库连接?

c#

如果连接到数据库消耗大量资源,那么如果必须再次打开数据库连接,为什么总是在应用程序中关闭数据库连接?我可以仅在整个应用程序中使此连接全局可用,以便其他类和方法重用它吗?

例如(用伪代码):

public class PopulateGridViews()
{
    public SqlConnection conn = new SqlConnection(@"Database:DATABASE");
    conn.Open();

    void PopulateGrid1()
    {
        SqlCommand cmd = new SqlCommand("SELECT * FROM TABLE1");
        cmd.Connection = conn;
        cmd.ExecuteNonQuery();
        cmd.Dispose();
        // Populate Grid1
    }

    void PopulateGrid2()
    {
        SqlCommand cmd = new SqlCommand("SELECT * FROM TABLE2");
        cmd.Connection = conn;
        cmd.ExecuteNonQuery();
        cmd.Dispose();
        // Populate Grid2
    }
}

阅读 415

收藏
2020-05-19

共1个答案

一尘不染

您不应该打开连接。

你应该:

  1. 尽可能晚地打开连接
  2. 尽快关闭连接

连接本身将返回到连接池。连接是有限且相对昂贵的资源。您建立的具有 完全相同 的连接字符串的任何新连接都将能够重用池中的连接。

强烈建议您在使用完连接后始终关闭该连接,以便将连接返回到池中。您可以使用Connection对象的Close或Dispose方法,或通过在C#中的using语句或Visual
Basic中的using语句中打开所有连接来执行此操作。未显式关闭的连接可能不会添加或返回到池中。有关更多信息,请参见使用Statement(C#参考)或如何:处置Visual
Basic的系统资源。 参考

您应该适当包装IDisposableusing语句块中实现的所有内容:

 using (SqlConnection connection = new SqlConnection(connectionString))
 {
     connection.Open();

     ...

     command.ExecuteNonQuery();
 }
2020-05-19