测试C#MySQL连接池失败,出现异常:连接必须有效且打开
本文关键字:连接 有效 C#MySQL 失败 测试 异常 | 更新日期: 2023-09-27 17:58:09
我正试图在MySQL的.net连接器6.6.4.0上使用连接池,使用以下代码为多个线程提供服务:
static public uint uNonQuery(string query)
{
using (Connection = new MySqlConnection(ConnectionString))
{
if (Connection.State == ConnectionState.Open)
{
Console.WriteLine("Its open..>!!!!");
}
Connection.Open();
MySqlCommand cmd = new MySqlCommand(query, Connection);
cmd.ExecuteNonQuery();
MySqlDataAdapter adapter = new MySqlDataAdapter("SELECT LAST_INSERT_ID() AS 'identity'", Connection);
DataTable dt = new DataTable();
adapter.Fill(dt);
uint ret = 0;
if (dt.Rows.Count > 0)
{
try
{
ret = Convert.ToUInt32(dt.Rows[0]["identity"]);
}
catch
{
ret = 0;
}
}
else
ret = 0;
Connection.Close();
return ret;
}
}
我的连接字符串是
"server = 127.0.0.1; user id = ****; password = ****; database = testdb; pooling=true; maximumpoolsize=500;"
测试的线程是
static void DoInserts(object o)
{
int i = (int)o;
Console.WriteLine("Insert Thread {0} launched", i);
for(int x = 0; x < 1000; x++)
{
uint insertId = DataLayer.uNonQuery(String.Format("INSERT INTO testdb.dbtest (writeNo,strNo) VALUES ({0},'x={0} thread={1}')", x, i));
}
Console.WriteLine("Insert Thread {0} completed", i);
}
我得到了异常异常:连接必须有效且打开在2个并发线程上进行了大约6次插入之后,我是否还需要做其他事情才能使池正常工作?
感谢
在行using (Connection = new MySqlConnection(ConnectionString))
中,您使用的是变量Connection
。这个变量在哪里定义?它是静态的吗?您应该在uNonQuery
的范围中定义它。如果变量Connection
是静态的,那么在对uNonQuery
的新函数调用打开连接后,连接可能会关闭
示例:-线程1调用uNonQuery
并打开,执行它的操作。-线程2调用uNonQuery
、打开连接,-线程1关闭Connection
-线程2无法执行其任务,因为连接突然关闭。
如果以上不是你的问题的原因,我需要更多的代码来检查这个问题。