Завершает ли использование закрытие открытого соединения SQL - PullRequest
64 голосов
/ 18 декабря 2008

Если я заверну 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 

Ответы [ 6 ]

96 голосов
/ 18 декабря 2008

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

31 голосов
/ 18 декабря 2008

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

12 голосов
/ 28 февраля 2011

Согласно MSDN вам не нужно закрывать оператор.

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

4 голосов
/ 18 декабря 2008

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

2 голосов
/ 04 февраля 2016

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

1 голос
/ 18 декабря 2008

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...