MySQL вставка C# не выполняется при активации пула подключений - PullRequest
0 голосов
/ 25 мая 2020

У меня есть следующий метод 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())");
    }
  • Возможно, проблема вызвана наличием двух одновременных подключений ?
  • Я не должен повторно использовать соединение для чтения, даже если соединение отличается от соединения для записи?
...