Закрытие SqlConnection и SqlCommand c#

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

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

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

14
задан abatishchev 30 July 2010 в 11:34
поделиться

3 ответа

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

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

using(SQLConnection conn = 'connection string here')
{
    using(SQLCommand cmd = new ('sql query', conn))
    {
        //execute it blah blah
    }
}
9
ответ дан 1 December 2019 в 10:32
поделиться

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

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

Объединение здесь операторов using будет обрабатывать и то, и другое.

4
ответ дан 1 December 2019 в 10:32
поделиться

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

using (SqlConnection conn = new SqlConnection("connection string here"))
using (SqlCommand cmd = new SqlCommand("sql query", conn))
{
    // execute it blah blah
}
12
ответ дан 1 December 2019 в 10:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: