我有一个使用MySql 5.1.53和MySql连接器/Net 6.4.4的Visual Studio2008 C# .NET 3.5项目。
'protocol_version', '10'
'version', '5.1.53-community-log'
'version_comment', 'MySQL Community Server (GPL)'
'version_compile_machine', 'unknown'
'version_compile_os', 'Win64'我在数据库中创建了一个表,如下所示。
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;
}
}
}但是,在模拟故障之后,表仍然存在于我的数据库中。
我需要做什么才能使事务正确回滚?
发布于 2011-10-28 01:36:14
Create Table语句导致自动提交。它不参与交易。
请参阅Statements That Cause an Implicit Commit
本节中列出的语句(以及它们的任何同义词)隐式地结束事务,就像您在执行语句之前执行了提交一样。
在您的情况下,如果发生异常,您可以直接删除该表。从技术上讲,这不是一个回滚,但它应该可以满足您的目的。
顺便说一句,你不需要try catch块。如果在没有调用Commit的情况下对事务调用dispose,则事务将自动回滚
https://stackoverflow.com/questions/7919973
复制相似问题