Закрытие SqlConnection и SqlCommand С#
В моем DAL я пишу такие запросы:
using(SQLConnection conn = "connection string here")
{
SQLCommand cmd = new ("sql query", conn);
// execute it blah blah
}
Теперь мне пришло в голову, что я явно не закрываю объект SQLCommand. Теперь я знаю, что блок "using" будет заботиться о объекте SQLConnection, но будет ли он также заботиться об объекте SQLCommand? Если нет, то у меня есть серьезная проблема. Я должен был бы включить "использование" в SQLCommand на тысячи и тысячи строк кода или сделать cmd.Close() для сотен методов. Скажите, пожалуйста, что если использование или закрытие команды обеспечит лучшее управление памятью веб-приложения?
Ответы
Ответ 1
Нет, оператор using
не позаботится о команде.
Вы должны также обернуть команды с помощью операторов using
, так как это правильно вызовет на них Dispose
:
using(SQLConnection conn = 'connection string here')
{
using(SQLCommand cmd = new ('sql query', conn))
{
//execute it blah blah
}
}
Ответ 2
SqlConnection
не знает о SqlCommand
, поэтому вы должны закрыть его самостоятельно:
using (SqlConnection conn = new SqlConnection("connection string here"))
using (SqlCommand cmd = new SqlCommand("sql query", conn))
{
// execute it blah blah
}
Ответ 3
Он не будет обрабатывать SqlCommand
, но SqlCommand
в конечном итоге будет обработан сборщиком мусора. Я имею тенденцию делать следующее:
using (SqlConn conn ... )
using (SqlComm comm ... )
{
conn.Open();
}
Укладка операторов using здесь будет обрабатывать оба.