Ответ 1
Выход из использования блоков вызывает .Dispose() для рассматриваемого объекта (cn
в вашем примере), который для SqlConnection закроет соединение и любые открытые ресурсы.
Если я завершаю 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
Выход из использования блоков вызывает .Dispose() для рассматриваемого объекта (cn
в вашем примере), который для SqlConnection закроет соединение и любые открытые ресурсы.
Точнее, вызов Dispose или Close помечает основное физическое соединение как "Не используется", но на самом деле не закрывает его. Таким образом, соединение "Не используется", которое еще не физически закрыто, доступно для объединения. Следовательно, вызов Dispose вернет соединение с пулом соединений.
В соответствии с MSDN вам не нужен оператор close.
"Следующий пример создает SqlConnection, открывает его, отображает некоторые его свойства. Соединение автоматически закрывается в конце блока использования." - http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.close.aspx
В то время как метод SQL Dispose закрывает соединение (в конце концов, согласно дарину), вы должны оставить вызов Close. Причина в том, что вы будете полагаться на базовую реализацию Dispose для вызова close. Кроме того, просмотр Open без закрытия - это как просмотр нового без Delete для тех из нас, которые запрограммированы на неуправляемых языках. Это запах кода для меня.
"A Использование блока ведет себя как конструкция Try... finally, в которой блок Try использует ресурсы, и блок finally блокирует их. Вследствие этого блок Using гарантирует удаление ресурсов, независимо от того, как вы выходите блок. Это справедливо даже в случае необработанного исключения, за исключением исключения StackOverflowException."
https://msdn.microsoft.com/en-us/library/htd05whh.aspx
использование - это просто стенография, чтобы попробовать/наконец. это эквивалентный код тому, что вы разместили
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 должен заботиться обо всех очистках ресурсов, в случае соединений он закроет его.