在处理命令并且直接在命令上定义连接时,连接是否关闭?

时间:2009-01-04 01:21:45

标签: c# using using-statement

我知道很多例子都存在,其中定义了SqlConnection,然后定义了SqlCommand,两者都在Using blocks中:

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
}

4 个答案:

答案 0 :(得分:11)

不,SqlCommand从不尝试关闭/处置连接。

答案 1 :(得分:5)

不,在您明确处置连接对象之前,不会处置它。但我的建议是尽可能使用使用块

答案 2 :(得分:4)

它不会关闭连接,您需要自己关闭它或将其放在自己的使用状态中。

此处还提示您使using块更具可读性:

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

答案 3 :(得分:-2)

@milot

  

但我的建议是尽可能使用积木。

在使用非IDisposable对象时使用Using Blocks很不错但没用,所以如果你在任何地方使用Using Blocks,这可能会让人感到困惑。

请注意,如果它们没有实现IDisposable,那么您的对象可能不会被Disposed。

希望这有帮助。