C# 是否使用此函数处理SqlConnection

C# 是否使用此函数处理SqlConnection,c#,dispose,sqlconnection,C#,Dispose,Sqlconnection,我的问题是,如果删除最后一块代码,垃圾收集器在处理SQlConnection对象时会关闭连接吗 我知道直言不讳是更好的做法,但我的同事不同意 垃圾收集器在处理数据时是否会关闭连接 SQlConnection对象 垃圾收集器不负责对对象调用Dispose,通常在终结器中调用Dispose,只有这样GC才能正确地处理该对象 需要注意的一点是,您无法预测垃圾收集进程何时运行,因此最好显式地处理对象(实现IDisposable) 就数据库连接而言,该方法应尽可能晚地打开,并尽可能早地关闭 在上述情况下c

我的问题是,如果删除最后一块代码,垃圾收集器在处理SQlConnection对象时会关闭连接吗

我知道直言不讳是更好的做法,但我的同事不同意

垃圾收集器在处理数据时是否会关闭连接 SQlConnection对象

垃圾收集器不负责对对象调用
Dispose
,通常在终结器中调用
Dispose
,只有这样GC才能正确地处理该对象

需要注意的一点是,您无法预测垃圾收集进程何时运行,因此最好显式地处理对象(实现
IDisposable

就数据库连接而言,该方法应尽可能晚地打开,并尽可能早地关闭

在上述情况下
cx.Close()
应该足够了,相反,您也可以调用
cx.Dispose
,但更好的方法是将
SqlConnection
包含在块中


这将转换为
try/finally
块,它将确保
SqlConnection
处理

垃圾收集将处理它,但由于它是不确定的,所以您不知道它何时处理

C#提供
使用
结构来处理非托管代码,建议使用它:

public CategorieEquipement Select(int NoType)
{
        SqlConnection cx = new SqlConnection(WebConfigurationManager.ConnectionStrings["SQLConnect"].Connection    String);
        SqlDataReader reader;

        CategorieEquipement lstCategorie = new CategorieEquipement();
        try
        {
            cx.Open();
            SqlCommand com = new SqlCommand("SELECT_CategorieEquip", cx);
            com.CommandType = System.Data.CommandType.StoredProcedure;
            com.Parameters.AddWithValue("@where",NoType);
            reader = com.ExecuteReader();

            while (reader.Read())
            {
                lstCategorie.CodeRef = reader["CodeRef"].ToString();
            }
        }
        catch (Exception ex)
        {
            Debug.WriteLine("SELECT ERROR : " + ex.ToString());
            return null;
        }
        finally
        {
            if (cx != null)
            {
                cx.Close();
            }
        }
        return lstCategorie;
    }
}

告诉您的同事,他们应该使用将实现IDisposable接口的对象的任何实例包装成一个
,以便以确定的方式对其进行处理,以确保正确管理应用程序资源并避免内存泄漏等问题。

您的同事错了为什么不包装
Sql对象使用(){}
来利用自动处理的优势。。GC也不总是即时的。。我也同意@Steve的观点也许你不需要依赖你的奶牛工人给你有缺陷的建议/信息为什么不保持原样,代码看起来很好。。。
using (SqlConnection cx = new SqlConnection(WebConfigurationManager.ConnectionStrings["SQLConnect"].ConnectionString);)
{

}