Закрытие SqlConnection и SqlCommand c # - PullRequest
14 голосов
/ 30 июля 2010

В моем DAL я пишу такие запросы:

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

Теперь мне просто пришло в голову, что я не закрываю объект SQLCommand явно.Теперь я знаю, что блок «using» позаботится об объекте SQLConnection, но будет ли он также позаботиться об объекте SQLCommand?Если нет, то у меня серьезная проблема.Я должен был бы вставить «использование» в SQLCommand для тысяч и тысяч строк кода или выполнить cmd.Close () для сотен методов.Скажите, пожалуйста, что если ввести команду использования или закрытия, это обеспечит лучшее управление памятью веб-приложения?

Ответы [ 3 ]

12 голосов
/ 30 июля 2010

SqlConnection не знает о SqlCommand, поэтому вы должны закрыть его самостоятельно:

using (SqlConnection conn = new SqlConnection("connection string here"))
using (SqlCommand cmd = new SqlCommand("sql query", conn))
{
    // execute it blah blah
}
9 голосов
/ 30 июля 2010

Нет, оператор using не позаботится о команде.

Вы должны также обернуть команды операторами using, так как это правильно вызовет Dispose для них:

using(SQLConnection conn = 'connection string here')
{
    using(SQLCommand cmd = new ('sql query', conn))
    {
        //execute it blah blah
    }
}
4 голосов
/ 30 июля 2010

Он не будет обрабатывать SqlCommand, но SqlCommand будет в конечном итоге будет обрабатываться сборщиком мусора.Я склонен делать следующее:

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

Сложив операторы здесь, мы справимся с обоими.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...