Закрытие соединения 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, или будет ли это использовать для меня использование инструкции? Я просто не хочу, чтобы соединение висело открытым
Благодаря
Ответы
Ответ 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 выполнило бы эту работу для вас в одиночку.
Фактически вы подключаетесь к пулу подключений.