我有一个 C# 多线程
应用程序,并且在整个应用程序中使用单个连接的 MySQL
。但是当两个或多个线程尝试同时访问数据库时,我会收到以下错误:
已经有一个与此连接相关联的打开的
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
,并为两个不同的线程创建了两个独立的连接,但仍然出现了上述错误。
我是否漏掉了什么?
如何实现连接池,以便所有线程都使用单独的连接,并且不会引起任何问题?
using
创建连接,问题就解决了。 https://dev59.com/a2kw5IYBdhLWcg3ws8xj#9707060 - Tim Schmelternew MySqlConnection("Server=ser....
是否是ADO.NET?(上面的代码中我是否在使用ADO.net?我不知道)如果我将_connectionSetup
实例变量设置为连接,那么当我使用实例变量打开连接时,它会再次连接到数据库服务器还是从池中获取连接以进行第二次或更多次连接。 - Varun JainPooling=True;
不会有任何损害。但是,请注意,这是默认行为。简而言之,如果在连接字符串中未指定pooling=false
,则已启用连接池。 - Tim Schmelter