2010-06-30 49 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(); 

清除池中,那麼就應該消失。這有時可能有用,但通常不需要。