首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MySqlTransaction回滚

使用MySqlTransaction回滚
EN

Stack Overflow用户
提问于 2011-10-28 01:34:46
回答 1查看 2.9K关注 0票数 1

我有一个使用MySql 5.1.53和MySql连接器/Net 6.4.4的Visual Studio2008 C# .NET 3.5项目。

代码语言:javascript
复制
'protocol_version', '10'
'version', '5.1.53-community-log'
'version_comment', 'MySQL Community Server (GPL)'
'version_compile_machine', 'unknown'
'version_compile_os', 'Win64'

我在数据库中创建了一个表,如下所示。

代码语言:javascript
复制
using (MySqlConnection c = new MySqlConnection(connection_string))
{
    c.Open();
    using (MySqlCommand cmd = c.CreateCommand())
    using (MySqlTransaction xt = c.BeginTransaction())
    {
        cmd.Connection = c;
        cmd.Transaction = xt;
        try
        {
            cmd.CommandText =
                @"CREATE TABLE `my_table` (
                  ...
                ) ENGINE=InnoDB AUTO_INCREMENT=72 DEFAULT CHARSET=latin1";
            cmd.ExecuteNonQuery();

            throw new System.Exception("This is a simulated failure!!!");

            xt.Commit();
        }
        catch
        {
            xt.Rollback();
            throw;
        }
    }
}

但是,在模拟故障之后,表仍然存在于我的数据库中。

我需要做什么才能使事务正确回滚?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-28 01:36:14

Create Table语句导致自动提交。它不参与交易。

请参阅Statements That Cause an Implicit Commit

本节中列出的语句(以及它们的任何同义词)隐式地结束事务,就像您在执行语句之前执行了提交一样。

在您的情况下,如果发生异常,您可以直接删除该表。从技术上讲,这不是一个回滚,但它应该可以满足您的目的。

顺便说一句,你不需要try catch块。如果在没有调用Commit的情况下对事务调用dispose,则事务将自动回滚

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7919973

复制
相关文章

相似问题

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