【发布时间】:2012-08-27 01:39:03
【问题描述】:
我目前正在开发一个使用 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 这样做呢?
谢谢!
克里斯
【问题讨论】:
标签: c# mysql exception transactions autocommit