2009-01-04 78 views
8

我知道有很多例子表明,一個SqlConnection定義,然後一個SqlCommand定義,無論是在使用塊:命令處置時連接是否關閉,連接是直接在命令上定義的?

using (var conn = new SqlConnection(connString)) { 
     using (var cmd = new SqlCommand()) { 
     cmd.Connection = conn; 
     //open the connection 
     } 
} 

我的問題:如果我直接定義中SqlCommand的連接,那麼連接命令處置時關閉?

using (var cmd = new SqlCommand()) { 
     cmd.Connection = new SqlConnection(connString); 
     //open the connection 
} 

回答

11

不,SqlCommand從不嘗試關閉/處置連接。

5

不,連接對象在你明確地處理它之前不會被處置。但我的建議是儘可能使用使用塊

4

它沒有關閉連接,您需要自己關閉它或使用它自己的語句。

而且,這裏是一個提示,讓您using塊多一點可讀性:

using (var conn = new SqlConnection(connString)) 
using (var cmd = new SqlCommand()) 
{ 
    cmd.Connection = conn; 
} 
+0

非常好的安德魯,我從來沒有見過這樣的組合。將不得不嘗試一下。我總是嵌套多個「使用塊」,這可能會使代碼難以閱讀。 – barneytron 2009-01-04 06:19:40

+1

國際海事組織,這使得他們很少可讀。我可以放棄捲曲,只是不是縮進內在使用的部分。 – 2009-01-05 21:46:25

-2

@milot

但我的建議是使用塊時,您可以使用。

使用使用塊很不錯,但在使用非IDisposable對象時無用,所以如果您在任何地方使用使用塊,這可能會造成混淆。

要小心,因爲如果您的對象不實現IDisposable,您的對象可能不會被處置。

希望這會有所幫助。