【发布时间】:2013-01-23 11:32:24
【问题描述】:
我正在尝试使用 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 次插入后,我还需要做些什么才能使池正常工作吗?
谢谢
【问题讨论】:
-
出于兴趣,你为什么要检查连接是否打开然后不管它打开它??
-
@DanielKelley 你好。我在调用 Open() 之前测试了它是否打开,并且在 Open() 调用之前它没有打开,这是预期的,尽管启用了连接池。
-
(Connection.State == ConnectionState.Open表示您的代码逻辑有问题。如果要在范围内打开连接,则无需检查它是否已打开。
标签: c# mysql multithreading connection-pooling