Заканчивается ли закрытие открытого SQL-соединения

Если я завершаю SQLConnection в приложении "Использовать", должен ли я закрыть его или использовать его с помощью дескриптора?

using cn as new system.data.sqlclient.sqlconnection()
    cn.open
    '{do a bunch of other stuff with commands and datareaders here}
    cn.close 'Do I need this?
end using 

Ответ 1

Выход из использования блоков вызывает .Dispose() для рассматриваемого объекта (cn в вашем примере), который для SqlConnection закроет соединение и любые открытые ресурсы.

Ответ 2

Точнее, вызов Dispose или Close помечает основное физическое соединение как "Не используется", но на самом деле не закрывает его. Таким образом, соединение "Не используется", которое еще не физически закрыто, доступно для объединения. Следовательно, вызов Dispose вернет соединение с пулом соединений.

Ответ 3

В соответствии с MSDN вам не нужен оператор close.

"Следующий пример создает SqlConnection, открывает его, отображает некоторые его свойства. Соединение автоматически закрывается в конце блока использования." - http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.close.aspx

Ответ 4

В то время как метод SQL Dispose закрывает соединение (в конце концов, согласно дарину), вы должны оставить вызов Close. Причина в том, что вы будете полагаться на базовую реализацию Dispose для вызова close. Кроме того, просмотр Open без закрытия - это как просмотр нового без Delete для тех из нас, которые запрограммированы на неуправляемых языках. Это запах кода для меня.

Ответ 5

"A Использование блока ведет себя как конструкция Try... finally, в которой блок Try использует ресурсы, и блок finally блокирует их. Вследствие этого блок Using гарантирует удаление ресурсов, независимо от того, как вы выходите блок. Это справедливо даже в случае необработанного исключения, за исключением исключения StackOverflowException."
https://msdn.microsoft.com/en-us/library/htd05whh.aspx

Ответ 6

использование - это просто стенография, чтобы попробовать/наконец. это эквивалентный код тому, что вы разместили

Try
    SqlConnection cn as new system.data.sqlclient.sqlconnection()
    cn.open
    '{do a bunch of other stuff with commands and datareaders here}
    cn.close 'Do I need this?
Finally
    cn.Dispose()
End Try

Dispose должен заботиться обо всех очистках ресурсов, в случае соединений он закроет его.