2015-10-14 98 views
1

是否需要單獨處理SqlConnection以及SqlCommand?是否需要配置SqlConnection以及SqlCommand?

我在做一個應用程序的一些維護工作,發現下面的代碼:

public void CallStoredProc(string storedProcName) 
{ 
    using (SqlCommand command = new SqlCommand(storedProcName, CreateConnection())) 
    { 
     command.CommandType = CommandType.StoredProcedure; 
     command.Connection.Open(); 

     // Additional code here. 

     command.ExecuteNonQuery(); 
    } 
} 

請問這樣清理關閉SqlConnection正確,正常情況下,以及是否存在錯誤?或者我們必須將代碼更改爲如下所示:

public void CallStoredProc(string storedProcName) 
{ 
    using (SqlConnection connection = CreateConnection()) 
    { 
     using (SqlCommand command = new SqlCommand(storedProcName, connection)) 
     { 
      command.CommandType = CommandType.StoredProcedure; 
      command.Connection.Open(); 

      // Additional code here. 

      command.ExecuteNonQuery(); 
     } 
    } 
} 
+1

你會在這裏得到答案http://stackoverflow.com/questions/12603093/can-you-dispose-of-multiple-objects-within-a-using-block http://stackoverflow.com/問題/ 9396064 /使用語句與 - 多變量 – andy

回答

2

是的,您將不得不分開處理(連接)連接。您也可以在source code中看到:SqlCommand.Dispose()不會關閉或處理它使用的連接(順便說一句,如果無法使用相同的連接執行多個命令,那將會很糟糕)。

3

是的,有必要在您的代碼段執行後處置sqlconnection和sqlcommand對象。

現在,有兩種方法可以實現此目的。 1.使用語句編寫代碼,該語句將負責處理對象,因爲sqlconnection和sqlcommand實現了用於處理對象的IDisposable接口。2.通過在sqlconnection對象上顯式調用.close()方法。

相關問題