14

在我的 DAL 中,我编写如下查询:

using(SQLConnection conn = "connection string here")
{
    SQLCommand cmd = new ("sql query", conn);
    // execute it blah blah
}

现在我突然想到我没有明确关闭 SQLCommand 对象。现在我知道“使用”块会处理 SQLConnection 对象,但这也会处理 SQLCommand 对象吗?如果不是那么我有一个严重的问题。我将不得不在成千上万行代码上的 SQLCommand 上添加“使用”,或者在数百种方法上执行 cmd.Close()。请告诉我,如果输入使用或关闭命令会为网络应用程序提供更好的内存管理?

4

3 回答 3

13

SqlConnection不了解SqlCommand,因此您应该自行关闭它:

using (SqlConnection conn = new SqlConnection("connection string here"))
using (SqlCommand cmd = new SqlCommand("sql query", conn))
{
    // execute it blah blah
}
于 2010-07-30T10:01:48.760 回答
10

不,该using语句不会处理命令。

您也应该用语句包装命令using,因为这将正确调用Dispose它们:

using(SQLConnection conn = 'connection string here')
{
    using(SQLCommand cmd = new ('sql query', conn))
    {
        //execute it blah blah
    }
}
于 2010-07-30T10:02:43.780 回答
5

它不会处理SqlCommand,但SqlCommand最终将由垃圾收集器处理。我倾向于做以下事情:

using (SqlConn conn ... )
using (SqlComm comm ... )
{
    conn.Open();
}

在这里堆叠 using 语句将同时处理这两种情况。

于 2010-07-30T10:01:53.877 回答