我有下面的代碼來查詢存儲過程中的記錄,但是我擔心我可能不會處理我需要或正在處理的對象在不久之後將被垃圾收集器清除的情況。c#sql要處置什麼
我是否需要處理SqlDataReader,因爲它位於try catch塊內?
我是否需要運行cmd.Dispose和cmd.Connection.Close,或者是否推斷另一個?
無論如何垃圾收集器最終會處理所有這些對象(可能不夠及時)或者由於使用非託管代碼而使這些對象暗含需要處置?
public void GetData(string studentID)
{
SqlCommand cmd = new SqlCommand("sp_stored_proc",
new SqlConnection(Settings.Default.connectionString))
{ CommandType = CommandType.StoredProcedure };
try
{
cmd.Connection.Open();
cmd.Parameters.AddWithValue("@student_id", studentID);
SqlDataReader dr = cmd.ExecuteReader();
//do something with the data
if (dr != null)
dr.Dispose();
}
catch
{
//error handling
}
finally
{
if (cmd != null)
{
cmd.Dispose();
cmd.Connection.Close();
}
}
}
「不,cmd.dispose將關閉連接」 - 我認爲這是不正確的;據我所知,在命令中調用Dispose與其連接無關。 – 2009-07-21 12:05:52
@Kevin:你鏈接到的狀態,調用一個*連接對象*上的Dispose會調用關閉該同一個對象。 「命令」一詞不會出現在頁面上。 – 2009-07-21 12:15:34
我誤讀了帖子時,我再次檢查。你是對的。 – kemiller2002 2009-07-21 12:16:55