2016-08-29 36 views
1

我想通過放入斷點來測試這段代碼。我想確保在使用塊之後調用dispose方法並且資源(SqlCommand)被正常釋放。 然而,在使用塊我沒有任何處置?當處理方法被調用時使用塊

using (SqlCommand command = new SqlCommand(queryString, connection)) 
{ 
    command.CommandType = CommandType.Text; 
    command.Parameters.Add("@OrganizationID", SqlDbType.Int); 
    command.Parameters["@OrganizationID"].Value = organizationId; 
    connection.Open(); 
    SqlDataReader sqlDataReader = command.ExecuteReader(CommandBehavior.CloseConnection); 

    try 
    { 
     while (sqlDataReader.Read()) 
     { 
      //do something 
     } 
    } 
    finally 
    { 
     sqlDataReader.Close(); 
    } 
} 
+1

'無處在使用塊,我打任何dispose'你能解釋一下這部分詳細? –

回答

1

using語句確保即使在對象上調用方法時發生異常,也會調用Dispose。將對象放在try塊中,然後在finally塊中調用Dispose,可以獲得相同的結果;實際上,這是編譯器如何翻譯using語句。該代碼示例前面擴展到在編譯時下面的代碼(注意額外的花括號創建該對象的範圍有限):

關鍵部分是「通過將對象試試看內達到同樣的效果阻止並最終打電話「。

SqlCommand command = new SqlCommand(queryString, connection); 
try { 

     // your code here 
} finally { 

     command.Dispose(); 
} 

MSDN

5

到的IDisposableDispose呼叫發生在using塊已(通過一個例外即)執行完畢,正常或異常之後。

在源代碼級調試器中捕獲調用的唯一方法是當您的源代碼爲IDisposable時 - 在您的情況下,它將是SqlCommand類的源代碼。

檢查工作方式的一種簡單方法是製作自己的IDisposable實現,將其放入using塊中並觀察其行爲。在完成using區塊後,應立即致電Dispose

相關問題