2012-12-21 77 views
4

是否有帶關閉和相同的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

只需使用'(SqlConnection conn = new SqlConnection(ConnectionString)){//你的代碼}' - 這會爲你處理和關閉。答案是「否」,只要它是活動對象就沒問題打開/關閉連接。問題是爲什麼? –

回答

4

您可以重新打開關閉它(你不能重新打開已釋放連接,雖然)後的連接。

至於戴夫齊赫的問題 - 我們的一些客戶在他們的數據庫中每一個連接的許可證,關閉連接允許其他應用程序使用它。

通常你必須連接池啓用,在這種情況下,數據庫的實際連接不會(總是)被關閉(立即),但可以通過在應用程序中,取長補短,平等連接對象使用。

1

是沒有問題的事情了。您可以儘可能多地打開和關閉連接。但是,我想知道爲什麼你想要打開和關閉同一個,而不是爲每個調用創建一個新的。那是因爲你連續多次打電話嗎?如果是這樣,你可以考慮使用一個SqlConnection,並在開始時打開一次,最後關閉一次。

+0

其實我有一個類,它可以作爲一些舊的VB庫的代理。這些VB模塊需要開始和提交事務的方法 - 所以在我的類的實例中應該有連接對象。因爲這個類的生命週期實際上很長,所以我不能永遠保持連接 - 所以我很感興趣,如果我可以簡單地將每個實例的一個連接對象保留在關閉/打開循環中,而不是每次都重新創建連接對象。 – Aloraman