program tip

열려있는 SQL 연결 닫기를 사용하여 종료합니까?

radiobox 2020. 11. 20. 08:49
반응형

열려있는 SQL 연결 닫기를 사용하여 종료합니까?


SQLConnection을 Using에 래핑하면 닫아야합니까 아니면 최종 사용이 처리합니까?

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 

using 블록을 종료하면 cnSqlConnection의 경우 연결 및 열려있는 모든 리소스를 닫는 문제의 개체 ( :)에서 .Dispose ()를 호출 합니다.


보다 정확하게 Dispose 또는 Close를 호출하면 기본 물리적 연결이 "사용 중이 아님"으로 표시되지만 실제로 닫지는 않습니다. 따라서 아직 물리적으로 닫히지 않은 "사용하지 않음"연결을 풀링에 사용할 수 있습니다. 따라서-Dispose를 호출하면 연결 풀에 대한 연결이 반환됩니다.


MSDN에 따르면 close 문이 필요하지 않습니다.

"다음 예제에서는 SqlConnection을 만들고 열고 해당 속성 중 일부를 표시합니다. 연결은 using 블록의 끝에서 자동으로 닫힙니다." -http : //msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.close.aspx


SQL의 Dispose 메서드가 연결을 닫는 동안 (결국 darin에 따라) Close 호출은 그대로 두어야합니다. 그 이유는 dispose의 기본 구현에 의존하여 close를 호출하기 때문입니다. 또한 닫히지 않고 열기를 보는 것은 관리되지 않는 언어로 프로그래밍 된 우리에게 삭제없이 새로 만들기를 보는 것과 같습니다. 나에게는 코드 냄새입니다.


"Using 블록은 Try ... Finally 구성처럼 동작합니다. Try 블록은 리소스를 사용하고 마지막 블록은 리소스를 폐기합니다.이 때문에 Using 블록은 블록을 종료하는 방법에 관계없이 리소스의 폐기를 보장합니다. StackOverflowException을 제외하고는 처리되지 않은 예외의 경우에도 마찬가지입니다. "
https://msdn.microsoft.com/en-us/library/htd05whh.aspx


using은 시도 / 마침에 대한 속기 일뿐입니다. 이것은 당신이 게시 한 것과 동등한 코드입니다.

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는 모든 리소스 정리를 처리해야하며 연결의 경우 닫습니다.

참고 URL : https://stackoverflow.com/questions/376068/does-end-using-close-an-open-sql-connection

반응형