2009-10-08 42 views
0

從C#中的Windows窗體運行對MySql數據庫的查詢後關閉踏步的正確方法是什麼?在c中關閉針對mysql數據庫的線程#

這是一個簡單的開放足夠像這樣?

conn.Open(); 

//querycode 

conn.Close(): 
+0

你是什麼意思「關閉踩」?你的意思是你想確保連接在進行SQL調用後關閉? – Pwninstein 2009-10-08 18:27:06

+0

我得到的問題是,當我使用工具iv創建m somtimes得到「太多連接」錯誤時,我的mysql數據庫被設置爲max與max_connections 100.並且當我運行一個簡單的conn.Close();在每個查詢之後,它似乎並沒有關閉與db的連接。在重新啓動SW之前,它不會釋放MySql腳本。 – Darkmage 2009-10-08 18:35:43

回答

3

嘗試使用:

using(MySqlConnection conn = new MySqlConnection(connString)) 
{ 
    conn.Open(); 
} // conn is automatically closed and disposed at the end of the using block 
0

類使用,你需要事後清理資源通常實施IDisposable的接口。這意味着它提供了一個名爲Dispose()的函數,可用於釋放資源。

對於一次性的對象,你可以使用使用聲明:

using (SomeDisposableClass c = new SomeDisposableClass()) { 

    // ... your code here 

} // c.Dispose() automatically called here, freeing up resources 

如果該類正確編碼,它應該釋放所有的資源 - 無論是數據庫連接,打開的文件句柄,等 - 在其Dispose()函數中。

這意味着MySQL可能與Dispose()中的數據庫斷開連接,因此您可能不需要顯式調用c.Close() - 但始終檢查文檔以確保其正確性。

0

它是好的,你正在做的方式,你也可以換連接對象爲using塊這樣的:

using (var con = new MySqlConnection(/*connection string*/)) 
{ 
    con.Open(); 
    //do stuff 
    // con.Close(); //don't need this it will be closed automatically* 
} 

(* see

+1

con.Close();在這裏是多餘的。 – 2009-10-08 18:30:29

+0

對我來說,它似乎不是多餘的,因爲我的應用程序似乎構建越來越多的腳步作爲即時通訊從我的工具眉毛的MySql數據庫。 – Darkmage 2009-10-08 18:38:54

0

沒有,在你的問題的代碼是不夠好了。如果你的查詢拋出一個異常,你不會及時關閉()它,它會一直掛起,直到垃圾收集器注意到它。

您需要將對象封裝在using塊中,如其他人所示,或者以最小值將其封裝在try/finally結構中。