2014-09-28 149 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