2010-06-30 18 views
2

继我最近的问题之后,我已经关闭了我们的Web应用程序保持开放的大部分连接。但是,由以下功能创建的连接保持打开状态。任何人都可以确定它为什么不关闭?为什么这个类成员打开SQL连接?

public DataTable GetSubDepartment(int deptId) 
{ 
    DataTable dt = new DataTable(); 
    using (SqlConnection conn = new SqlConnection(Defaults.ConnStr)) 
    { 
     SqlCommand cmd = new SqlCommand("proc_getDepartmentChild", conn); 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.Parameters.Add(new SqlParameter("@dptParent", deptId)); 

     SqlDataAdapter da = new SqlDataAdapter(); 
     da.SelectCommand = cmd; 
     da.Fill(dt); 
    } 
    return dt; 
} 

*编辑* 继@ HenkHolterman的评论: 我使用SQL Server Management Studio中的活动日志来查看打开的连接。这一个被列为睡觉。所以你说什么是有道理的。有什么办法可以告诉我这是一个连接而不是一个开放的连接?

+1

确定吗? 'using'和'Fill()'都应该关闭它。您可能正在查看Pool中的连接,与此代码无关。 – 2010-06-30 09:22:30

+1

您可以分辨何时填充下一个表不会添加_extra_连接。 – 2010-06-30 09:32:46

回答

2

很可能是因为它回到了连接池。

呼叫

SqlConnection.ClearAllPools(); 

清除池中,那么就应该消失。这有时可能有用,但通常不需要。