У меня есть следующий метод INSERT в веб-проекте C#. Если я запустил проект без MySQL опроса подключения, все работает нормально, но когда я активирую Pooling = True в строке подключения к БД, этот метод перестает работать, операторы вставки никогда не завершаются.
Я понял, как изменить код, чтобы он работал, но я хотел бы понять, что происходит, и надеюсь, что вы можете помочь.
Когда я комментирую строку //myR.Close (); все работает нормально.
using MySql.Data.MySqlClient;
//query example consulta="INSERT INTO users (id, name) VALUES (1, 'Rob');
public static MySqlConnection GetWriteConnection()
{
string connStr = MySqlConnectionStrings.WriteConnectionString;
MySqlConnection conn = new MySqlConnection(connStr);
return conn;
}
public static MySqlConnection GetReadConnection()
{
string connStr = MySqlConnectionStrings.ReadConnectionString;
MySqlConnection conn = new MySqlConnection(connStr);
return conn;
}
public static bool Insert(string consulta)
{
MySqlConnection conn = BdaHelper.GetWriteConnection();
conn.Open();
using (conn)
{
try
{
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
MySqlCommand micomando = new MySqlCommand(consulta, conn);
micomando.ExecuteNonQuery(); //still not working
return true;
}
catch (Exception ex)
{
return false;
}
}
}
В моем приложении также есть многопоточный параллелизм и два типа соединений с базой данных: один предназначен только для чтения, а другой - для записи. Когда оператор вставки не работает, я не получаю никаких ошибок, просто изменение не фиксируется в базе данных. Читая статью в комментариях, я не думаю, что это относится к этой проблеме, но я бы добавил пример своей основной программы:
MySqlConnection readConnection = BdaHelper.GetReadConnection();
using (readConnection)
{
var users = GetUsers(readConnection);
var credentials = GetCredentials(readConnection);
//Example is the query that fails don't giving any exception
Insert("INSERT INTO login_log (id_user, date) VALUES (1, now())");
}
- Возможно, проблема вызвана наличием двух одновременных подключений ?
- Я не должен повторно использовать соединение для чтения, даже если соединение отличается от соединения для записи?