我目前正在开发一个使用 MySql 作为后端数据库的 C# 应用程序。
不幸的是,我发现了一种我无法解释的有线行为。
我想使用事务来“组合”多个查询,以确保只执行所有命令或不执行任何命令。
但是,由于我的编码错误,交易过程中发生了未处理的异常。
我对事务的理解是,在这种情况下,事务会回滚。
尽管如此,我发现 Mysql 似乎默认启用 AutoCommit 并在断开连接后提交,因为未处理的异常导致崩溃。
所以我试图通过执行禁用它SET autocommit = 0
但这不起作用。
编辑: 我使用以下代码创建了事务:
_transaction = _mysqlConnection.BeginTransaction();
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = _mysqlConnection;
cmd.Transaction = _transaction
其他人提到,使用 BEGIN 应该可以解决这个问题,但事实并非如此。在 Mysql 日志中执行以下查询:
239 Connect user@localhost on gssm
239 Query SHOW VARIABLES
239 Query SHOW COLLATION
239 Query SET character_set_results=NULL
239 Init DB db
239 Query SET autocommit = 0
239 Query SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
239 Query BEGIN
239 Query INSERT INTO TestTable (KeyField, Value) VALUES ('foo', 'bar')
当然我应该修复我的代码,这样就不会发生未处理的异常,但是有没有办法阻止 Mysql 这样做呢?
谢谢!
克里斯