我想利用連接池,所以我可以使用數據庫而不將MysqlConnection對象傳遞給每個類。我有這樣的代碼:C#MySQL連接器:連接池不工作
Main.cs:
namespace batman
{
class Program
{
static void Main(string[] args)
{
using (MysqlConnection conn = new MysqlConnection("Server=localhost;User=root;Database=test;Password=root;Min Pool Size=3;Max Pool Size=5;Pooling=True"))
{
MonitorClass monitor = new MonitorClass();
monitor.Run();
}
//...
}
}
}
MonitorClass.cs:
namespace batman
{
public class MonitorClass
{
public void Run()
{
using (MySqlConnection conn = new MySqlConnection())
using (MySqlCommand cmd = conn.CreateCommand())
{
try
{
conn.Open();
cmd.CommandText = "SELECT id, package_type FROM package_registry WHERE finish_time <= @ftime";
cmd.Parameters.AddWithValue("@ftime", 0);
cmd.Prepare();
MySqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
int packageId = reader.GetInt32(0);
string packageType = reader.GetString(1);
Unirest.post("http://localhost/gears/ops/packagefinish")
.field("package", packageId)
.asStringAsync();
Console.WriteLine("[PackageMonitor] Package {0} ({1}) expired", packageId, packageType);
}
}
catch (MySqlException ex)
{
}
}
}
}
}
MonitorClass應該從連接池的連接。 但是,一旦我跑我的程序,它拋出與
信息System.InvalidOperationException:無法連接到任何指定的MySQL主機。
在:
cmd.Prepare();
現在,我想我做錯了什麼,但我搞不清楚究竟是什麼。
甲骨文的文檔說,這
連接器/網絡支持連接池獲得更好的性能和可擴展性的數據庫密集型應用程序。這是默認啓用的。您可以使用連接字符串選項「Pooling」,「Connection Reset」,「Connection Lifetime」,「Cache Server Properties」,「Max Pool Size」和「Min Pool Size」來調整其性能特徵。有關更多信息,請參見第5.2節「創建連接器/網絡連接字符串」。
當客戶端處理MySqlConnection時,連接池通過保持與服務器的本地連接正常工作。 隨後,如果打開一個新的MySqlConnection對象,它將從連接池創建,而不是創建新的本機連接。這提高了性能。
你從來沒有真正打開連接,所以這並不奇怪。 – stuartd
'conn.Open();'? – Fabjan