2012-04-11 75 views
2

這兩個問題的答案非常接近回答我自己的問題,但它們並不完全適用。在可能未打開或關閉的SqlConnection上調用Close關閉

現在我知道SqlConnection有更多的國家不僅僅是打開和關閉,我不知道我是否需要關閉該連接時,做到這一點並不裏面using語句

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語句將明確地處理Open和Closed案例,如果/*??*/對於其他州是相同的,那將是我的默認情況。)

回答

2

由於您在Dispose()我想我只是簡單地打電話給_transactionConnection.Dispose();,讓SqlConnection類做任何合適的事情。我會避免在這裏調用Close(),因爲雖然目前SqlConnection.Dispose基本上只是關閉它,但在將來可能會改變。

+0

如果我的代碼不在Dispose()中,這個答案會改變嗎? – mafue 2012-04-11 18:19:02

+0

如果這段代碼不在Dispose裏面,那麼......很難說;我想要回顧一下你使用這些組件的方式,因爲如果沒有更多關於你的需求的信息,我會懷疑你是在錯誤的軌道上執行。 – overslacked 2012-04-11 18:28:20

+1

夠公平的。在這種情況下,我很滿意Dispose。而且,由於'使用'調用無論如何都要處理,這必須是當人們以優選的方式打開SqlConnections時,SqlConnections如何關閉。 – mafue 2012-04-11 19:17:58