我試圖使用連接池對MySQL的.NET連接器6.6.4.0使用下面的代碼來投放多個線程:測試C#MySQL連接池失敗例外:連接必須是有效和開放的
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);
}
我得到的異常例外:連接必須有效且打開。大約6插入2個併發線程後,有什麼我需要做的啓用池正常工作?
感謝
出於興趣,你爲什麼要檢查連接是否打開,然後打開它? –
@DanielKelley嗨。我測試了在打開Open()之前它是否打開並且在Open()調用之前未打開,這是預期的,雖然啓用了連接池。 –
''(Connection.State == ConnectionState.Open''表示你的代碼的邏輯有問題,如果你打開連接的範圍,不需要檢查它是否已經打開。 –