gpt4 book ai didi

c# - 测试 C# MySQL 连接池失败并出现异常 : Connection must be valid and open

转载 作者:行者123 更新时间:2023-11-29 14:03:15 25 4
gpt4 key购买 nike

我正在尝试使用 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 关闭连接- 线程 2 无法执行其操作,因为连接突然关闭。

如果上述不是您问题的原因,我将需要您的更多代码来检查问题。

关于c# - 测试 C# MySQL 连接池失败并出现异常 : Connection must be valid and open,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14760066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com