2014-09-28 211 views
3

我有C# multi threading應用程序和使用MySQL單個連接到整個應用程序。但是,當兩個或多個線程試圖在同一時間訪問數據庫,然後我得到以下錯誤:C#MySQL連接池

已經沒有與此Connection必須先關閉相關聯的打開DataReader

我的連接代碼如下

public static _connectionSetup = new MySqlConnection("Server=server ; Database=database;User ID=user;Password=pass;Pooling=true;"); 

,當我需要使用連接我使用下面的代碼: -

using (MySqlConnection connection =_connectionSetup) 
{ 
    using (MySqlCommand command = new MySqlCommand("proc", connection)) 
    { 
     .... 
    } 
} 

我試圖用pooling=true和我已創建兩個單獨的連接以及兩個不同的線程,但我仍然遇到以上錯誤。
我錯過了什麼嗎?

我該如何實現連接池,以便所有線程都將使用單獨的連接並且不會導致任何問題?

+5

不要讓它變成靜態的,在'using'中創建連接,你就完成了。 http://stackoverflow.com/questions/9705637/executereader-requires-an-open-and-available-connection-the-connections-curren/9707060#9707060 – 2014-09-28 20:46:18

+0

你不覺得創建連接所有的時間在使用會導致成本,因爲一次又一次地連接是非常昂貴的操作。 – 2014-09-29 19:28:48

+0

編號請在上面的鏈接中閱讀我的答案,它會比我在評論中做的更好解釋它。 – 2014-09-29 19:33:57

回答

10

默認情況下會打開池,因此您不需要該連接字符串參數。

不共享MySqlConnection實例。就是這樣。

合併不是您在代碼中實現的東西,它是由ADO.NET爲您完成的。

+3

我不使用'ADO.NET'使用自己的代碼來獲取數據並保存數據,我怎樣才能確保每個後臺工作線程將與單獨的連接一起工作,並且不會給出上述錯誤 – 2014-09-29 19:31:07