Я хочу использовать пул соединений, чтобы я мог использовать базу данных, не передавая объект MysqlConnection для каждого класса. У меня есть такой код:C# MySQL Connector: пулы подключений не работают
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();
Теперь, я думаю, что я делаю что-то неправильно, но я не мог понять, что именно.
Oracle Docs говорит, что это
Соединитель/Net поддерживает подключение Объединив для повышения производительности и масштабируемости приложений баз данных интенсивно. Это включено по умолчанию. Вы можете отключить его или настроить его характеристики производительности, используя параметры строки подключения: «Объединение», «Сброс соединения», «Время жизни соединения», «Свойства сервера кэша», «Максимальный размер пула» и «Минимальный размер пула». Для получения дополнительной информации см. Раздел 5.2 «Создание соединительной линии/сетевого соединения».
Пул соединений пула, поддерживая родное подключение к серверу, когда клиент располагает MySqlConnection. Впоследствии, если открыт новый объект MySqlConnection, он будет создан из пула соединений, вместо создания нового родного соединения. Это повышает производительность.
Вы никогда не открыть соединение, так что это не удивительно. – stuartd
Где находится 'conn.Open();'? – Fabjan