2012-12-21 1 views
4

매번 새 SqlConnection을 만드는 대신 동일한 SqlConnection 개체를 닫고 여는 데 문제가 있습니까? 예를 들어 :이미 닫힌 SqlConnection 열기

SqlConnection conn = new SqlConnection(ConnectionString); 
conn.Open(); 
//Some work here 
conn.Close() 
//Some work here... conn stays in scope 
conn.Open() 

연결 두 번째를 열어 불법 상태 예외를 얻을 수있는 기회가 있습니까?

+0

나는 괜찮다고 생각하지만, 더 이상 사용하지 않을 때는'Dispose()'를 부르는 것을 잊지 마십시오. – Bridge

+1

이 질문을 던지면 어떨까요? 처음부터 닫는 이유는 무엇입니까? –

+0

간단히'using (SqlConnection conn = new SqlConnection (ConnectionString)) {// your code} '를 사용하면 처분하고 닫을 수 있습니다. 대답은 "아니오", 아무 문제가 열려있는/닫기 연결은 살아있는 개체입니다. 그 이유는 무엇입니까? –

답변

4

연결을 닫은 후에도 다시 열 수 있습니다 (단절된 연결은 다시 열 수 없습니다).

Dave Zych의 질문에 따르면 고객 중 일부는 데이터베이스에 대한 연결 별 라이센스를 가지고 있기 때문에 연결을 닫으면 다른 응용 프로그램에서도 사용할 수 있습니다.

보통 연결 풀링을 사용할 수 있습니다.이 경우 데이터베이스에 대한 실제 연결은 (항상) 닫히지 않고 (즉시) 응용 프로그램 내의 다른 연결 객체에 의해 사용될 수 있습니다.

1

이렇게하는 데는 문제가 없습니다. 원하는만큼 연결을 열고 닫을 수 있습니다. 그러나 각 호출에 대해 새로운 호출을 작성하는 대신 동일한 호출을 열고 닫으려는 이유가 궁금합니다. 그것은 당신이 빠른 연속적으로 많은 전화를하기 때문에 그것입니까? 그렇다면 하나의 SqlConnection을 사용하고 시작시 한 번 열어 끝까지 한 번 닫는 것을 고려해보십시오.

+0

사실 저는 오래된 VB 라이브러리의 프록시 역할을하는 클래스가 있습니다. 이러한 VB 모듈에는 트랜잭션을 시작하고 커밋하는 메소드가 필요하므로 클래스의 인스턴스에 연결 객체가 있어야합니다. 클래스의 수명이 실제로 길기 때문에 연결을 영원히 열어 둘 수는 없습니다. 매번 인스턴스를 만들지 않고 인스턴스 하나당 하나의 연결 객체를 닫기/열기 순환으로 유지하면됩니다. – Aloraman