首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在未处理异常后使用C# Mysql连接器禁用C#

在未处理异常后使用C# Mysql连接器禁用C#
EN

Stack Overflow用户
提问于 2012-09-01 15:05:55
回答 4查看 4.3K关注 0票数 0

我目前正在开发一个以C#作为后端数据库的MySql应用程序。

不幸的是我发现了一种我无法解释的行为。

我想使用事务,“组合”多个查询,以确保只执行所有命令或没有执行。

但是,由于我的编码错误,在事务处理期间发生了一个未处理的异常。

我对事务的理解是,在这种情况下,事务被回滚。

尽管如此,我发现Mysql在默认情况下似乎启用了AutoCommit,并在断开连接后提交,原因是未处理的异常导致崩溃。

所以我尝试通过执行SET autocommit = 0来禁用它。

但这不管用。

编辑:i使用以下代码创建了事务:

代码语言:javascript
复制
_transaction = _mysqlConnection.BeginTransaction();
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = _mysqlConnection;
cmd.Transaction = _transaction

其他人提到,使用BEGIN应该解决这个问题,但事实并非如此。在Mysql日志中,执行以下查询:

代码语言:javascript
复制
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这样做吗?

谢谢!

克里斯

EN

Stack Overflow用户

发布于 2012-09-01 15:17:38

您是否手动回滚了异常处理程序上的事务?

代码语言:javascript
复制
catch(Exception ex)
{
    try
    {
        trans.Rollback();
    }
    catch(MySqlException mse)
    {
        log.error(mse);
    }
}
票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12228850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档