我目前正在开发一个以C#作为后端数据库的MySql应用程序。
不幸的是我发现了一种我无法解释的行为。
我想使用事务,“组合”多个查询,以确保只执行所有命令或没有执行。
但是,由于我的编码错误,在事务处理期间发生了一个未处理的异常。
我对事务的理解是,在这种情况下,事务被回滚。
尽管如此,我发现Mysql在默认情况下似乎启用了AutoCommit,并在断开连接后提交,原因是未处理的异常导致崩溃。
所以我尝试通过执行SET autocommit = 0来禁用它。
但这不管用。
编辑:i使用以下代码创建了事务:
_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这样做吗?
谢谢!
克里斯
发布于 2012-09-01 15:17:38
您是否手动回滚了异常处理程序上的事务?
catch(Exception ex)
{
try
{
trans.Rollback();
}
catch(MySqlException mse)
{
log.error(mse);
}
}https://stackoverflow.com/questions/12228850
复制相似问题