C# 在SqlCommand.Connection上使用语句的行为是否相同?

C# 在SqlCommand.Connection上使用语句的行为是否相同?,c#,sql,C#,Sql,在using块中放置SqlCommand.Connection是否与在其自己的using块中放置SqlConnection一样关闭连接?(Is#1=#2) 例1 using (var cmd = GetCommandWithConnectionSetInternally(connString)) { using (cmd.Connection) { } } 例2 using(var conn = new SqlConnection(connString)) {

在using块中放置SqlCommand.Connection是否与在其自己的using块中放置SqlConnection一样关闭连接?(Is#1=#2)

例1

using (var cmd = GetCommandWithConnectionSetInternally(connString))
{ 
    using (cmd.Connection) 
    {

    }
}
例2

using(var conn = new SqlConnection(connString))
{
     using(var cmd = new SqlCommand(cmdText, conn))
     {

     }
 }

那么,示例1中的连接在退出“using”块时是否会像示例2中一样关闭?

我看不出它以任何其他方式工作,因为using只是
的一种简短形式,在finally块中使用
Dispose
调用try{}finally{}
。由于正在使用的资源对象是
cmd.Connection
,因此它应该被释放。

我看不到它以任何其他方式工作,因为使用只是
在finally块中用
Dispose
调用try{}finally{}
的一种简短形式。由于正在使用的资源对象是
cmd.Connection
,因此应该将其处理掉。

不确定,但示例#1在我看来是错误的。或者,如果您喜欢这种样式,您可以省略外部大括号,并使用using语句堆叠这两个对象。我同意#1看起来是错误的,碰巧我们有很多使用#1风格的遗留代码。我的DBA抱怨说,当他在SQL上运行sp_who2时,有很多“休眠”或“等待命令”项。我甚至不知道这是否是一个问题,但我正在尝试找出连接是否处于打开状态。不确定,但示例1在我看来似乎是错误的。或者,如果您喜欢这种样式,您可以省略外部大括号并使用语句堆叠这两个语句。我同意示例1看起来是错误的,碰巧我们有很多使用#1风格的遗留代码。我的DBA抱怨说,当他在SQL上运行sp_who2时,有很多“休眠”或“等待命令”项。我甚至不知道这是否是一个问题,但我正在试图弄清楚连接是否保持打开状态。+1-另外,示例2是一种更为普遍接受的用于生成DL逻辑的模式。@Tejs:同意,示例2对我来说更具可读性和清晰性。我会避免使用版本1。+1-另外,示例2是一种更为普遍接受的生成DL逻辑的模式。@Tejs:同意,示例2对我来说也更具可读性和清晰性。我会避免版本1。