2010-07-30 4 views
14

В моей DAL я пишу запросы как это:Закрытие SqlConnection и SqlCommand C#

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

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

+0

Я думаю, что это также должно быть интересно: http://valueinjecter.codeplex.com/ вики страницы? название = Данные% 20access% 20layer% 20% 28ORM% 29% 20with% 20the% 20Value% 20Injecter & referringTitle = Главная – Omu

ответ

9

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

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

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

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

using (SqlConnection conn = new SqlConnection("connection string here")) 
using (SqlCommand cmd = new SqlCommand("sql query", conn)) 
{ 
    // execute it blah blah 
} 
4

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

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

Укладка операторов использования здесь будет обрабатывать оба.

Смежные вопросы