2009-01-04 36 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,您的对象可能不会被处置。

希望这会有所帮助。