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

Я использую MySQL в качестве своей базы данных, и я хочу использовать транзакцию, чтобы убедиться, что все в порядке в случае возникновения ошибки. Но Rollback() и Commit() не работают должным образом.

Сначала я использовал Dapper, мне показалось, что проблема была в Dapper, и я перестал его использовать, но результат тот же.

Запись, которую я пытаюсь вставить, вставляется ДАЖЕ, ЕСЛИ код выдает исключение.

            var mysql = new MySqlConnection($"server=127.0.0.1;uid=root;pwd=PASSWORD;database=DBNAME;port=3306;default command timeout=0;");

            await mysql.OpenAsync();

            using (var tx = mysql.BeginTransaction(System.Data.IsolationLevel.ReadCommitted))
            using (var command = mysql.CreateCommand())
            {
                try
                {

                    command.Transaction = tx;
                    command.CommandText = "INSERT INTO tablename (field1, field2) " +
                                          "VALUES ('value1', 0)";

                    command.ExecuteNonQuery();

                    throw new Exception(); // <--- THROWING EXCEPTION .

                    tx.Commit();
                }
                catch (Exception ex)
                {
                    tx.Rollback();
                }
            }

1 Ответ

1 голос
/ 11 апреля 2020

Я обнаружил проблему.

MyISAM не поддерживает транзакции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...