2012-04-11 2 views
2

이 두 가지 질문에 대한 대답은 내 대답에 매우 가깝지만 실제로 도달하지는 못합니다.열려 있거나 닫히지 않을 수있는 SqlConnection에서 닫기 호출

는 내부되지 않습니다 문를 사용하여 :

switch (_transactionConnection.State) 
{ 
    case ConnectionState.Broken: /*??*/ ; break; 
    case ConnectionState.Closed: ; break; 
    case ConnectionState.Connecting: /*??*/ ; break; 
    case ConnectionState.Executing: /*??*/ ; break; 
    case ConnectionState.Fetching: /*??*/ ; break; 
    default: _transactionConnection.Close(); break;       
} 

SqlConnection _transactionConnection 안에 아니다 이 클래스 외부에서 트랜잭션을 시작, 커밋 및 롤백해야하기 때문에 문이 using입니다. 이 클래스는 IDisposable 구현하고 switch 문은 Dispose(bool disposing)

MSDN이 열려 이외의 폐쇄 상태는 제품의 향후 버전에 대한 것을 말한다에 살고 있지만, @Charlie 반사판이 다른 상태가 사용됩니다 보여줍니다 말했다.

누구나 /*??*/을 대체해야한다고 말할 수 있습니까? (내 최종 switch 문을 명시 적으로 열기 및 닫힌 경우 처리 할 것으로 예상하고 다른 상태에 대해 /*??*/ 동일합니다 경우 내 기본 경우.

답변

2

Dispose()에서 구현하기 때문에, 나는 단순히 _transactionConnection.Dispose();을 호출하고 SqlConnection 클래스가 그것이 적절하다고 느끼는 것이 무엇이든 할 것이라고 생각합니다. 현재으로 전화하는 것을 피할 것입니다. 왜냐하면 현재 SqlConnection.Dispose가 기본적으로 그냥 닫히는 것이 사실이지만 앞으로 변경 될 수 있기 때문입니다.

+0

내 코드가 Dispose() 내부에 없으면이 대답이 변경됩니까? – mafue

+0

이 코드가 Dispose 내부에 없으면 말하기 어렵습니다. 요구 사항에 대한 자세한 정보가 없으면 사용자가 잘못된 경로에 있다고 의심 할 수 있으므로 구현 방식에 따라 이러한 구성 요소를 사용하는 방식을 검토해야합니다. – overslacked

+1

충분합니다. 이 시나리오에서는 Dispose에 만족합니다. 어쨌든'using '이 Dispose를 호출하기 때문에 사람들이 선호하는 방식으로 SqlConnections를 열 때 SqlConnections가 닫히는 방식이어야합니다. – mafue

관련 문제