Подтвердить что ты не робот

Закрытие соединения ado.net при использовании оператора "using"

Я делаю свои методы доступа к базам данных на SQL Server следующим образом

  using (SqlConnection con = new SqlConnection(//connection string)
  {
    using (SqlCommand cmd = new SqlCommand(storedProcname, con))
     {
       try{
           con.open();
           //data reader code
       }
       catch
       {

       }
     }
  }

Нужно ли мне закрывать или удалять SqlCommand, или будет ли это использовать для меня использование инструкции? Я просто не хочу, чтобы соединение висело открытым Благодаря

4b9b3361

Ответ 1

using позаботится об этом для вас. Под капотом SqlConnection.Dispose() вызывает метод SqlConnection.Close(), а SqlCommand.Dispose() вызывает SqlCommand.Close().

В качестве дополнительного фона оператор using представляет собой синтаксический сахар для try ... finally, который размещает объект IDisposable в finally.

Ответ 2

В стороне, вы можете сделать код более кратким и читаемым следующим образом:

 using (SqlConnection con = new SqlConnection(/*connection string*/))
 using (SqlCommand cmd = new SqlCommand(storedProcname, con))
 {
    //...
 }

Ответ 3

Как сказал Фил, предложение об использовании позаботится об этом для вас. Когда он скомпилирован, он завершает создание соединения в попытке.. наконец и помещает вызов утилизации соединения внутри finally.

Для получения дополнительной информации вы можете увидеть с помощью статьи с инструкциями в msdn.

Ответ 4

Да, ваш код закроет соединение, однако это типично означает возврат обратно в пул соединений, который будет по-настоящему закрыт позже.

Если вы выполняете этот фрагмент кода, а затем выполняете sp_who и наблюдаете, что ваше соединение все еще существует, вот почему.

Если вам абсолютно необходимо, чтобы соединение было действительно закрыто (обязательно кромка), используйте ClearAllPools статический метод SqlConnection

Ответ 5

Using ключевое слово автоматически закроет соединение для вас поэтому вам не нужно беспокоиться о вызове connection.close() в конце каждый раз.

Ответ 6

когда область

using (SqlConnection con = new SqlConnection(//connection string) 
{
}

соединение будет автоматически удалено во время выполнения. так что не волнуйся

Ответ 7

Я думаю, что "использование" не требовалось для SqlCommand. "Использование" для SqlConnection выполнило бы эту работу для вас в одиночку. Фактически вы подключаетесь к пулу подключений.