Соединение закрывается, когда команда удаляется и соединение определяется непосредственно в команде? - PullRequest
8 голосов
/ 04 января 2009

Я знаю, что существует множество примеров, когда определяется SqlConnection, а затем определяется SqlCommand, оба в разделе Использование блоков:

using (var conn = new SqlConnection(connString)) {
      using (var cmd = new SqlCommand()) {
        cmd.Connection = conn;
        //open the connection
      }
}

Мой вопрос: если я определяю соединение непосредственно в SqlCommand, закрывается ли соединение при удалении команды?

using (var cmd = new SqlCommand()) {
      cmd.Connection = new SqlConnection(connString);
      //open the connection
}

Ответы [ 4 ]

11 голосов
/ 04 января 2009

Нет, SqlCommand никогда не пытается закрыть / удалить соединение.

5 голосов
/ 04 января 2009

Нет, объект подключения не будет удален, пока вы не удалите его явно. Но я рекомендую использовать , используя блоки , когда вы можете.

4 голосов
/ 04 января 2009

Он не закрывает соединение, вам нужно либо закрыть его самостоятельно, либо поставить его самостоятельно, используя статистику.

Также вот совет, чтобы сделать ваши using блоки немного более читабельными:

using (var conn = new SqlConnection(connString))
using (var cmd = new SqlCommand())
{
    cmd.Connection = conn;
}
0 голосов
/ 04 января 2009

@ milot

Но я рекомендую использовать блоки всякий раз, когда вы можете.

Использование использования блоков приятно, но бесполезно при работе с неидентифицируемыми объектами, и это может сбивать с толку, если вы используете «Использование блоков» где-либо.

Будьте осторожны, поскольку ваши объекты могут не быть утилизированными, если они не реализуют IDisposable.

Надеюсь, это поможет.

...