我正在使用 MySQL 5.0.27 并试图让事务正常工作。我遵循了本教程:
http://dev.mysql.com/doc/refman/5.0/es/connector-net-examples-mysqltransaction.html
但仍然无法使它们正常工作。我要更新的表是 InnoDB 并尝试执行“set autocommit=0”但它似乎没有做任何事情....我编写的代码如下:
public int transactionUpdate()
{
MySqlConnection connection = new MySqlConnection(connStr);
connection.Open();
MySqlCommand command = connection.CreateCommand();
MySqlTransaction trans;
trans = connection.BeginTransaction();
command.Connection = connection;
command.Transaction = trans;
try
{
command.CommandText = "SET autocommit = 0";
command.executeNonQuery();
command.CommandText = "UPDATE TBL.rec_lang rl SET rl.lang_code = 'en-us' WHERE rl.recording=123456";
command.executeNonQuery();
command.CommandText = "UPDATE TBL.rec_lang rl SET rl.lang_code = en-us WHERE rl.recording=123456";
command.executeNonQuery();
trans.Commit();
}
catch(Exception ex)
{
try
{
trans.Rollback();
}
catch(MySqlException mse)
{
log.error(mse);
}
}
}
第二个命令失败,因为它缺少 'en-us' 周围的 '。这应该将第一个查询也回滚到以前的值,但事实并非如此。你能告诉我我做错了什么吗???
MySQLConnector 6.3.6.0 版
MySQL 5.0.27 版
C# VS2010
最佳答案
我打开了第二个数据库,其中有错误的数据显示 ><... 这个方法有效。结果我什至不需要:
command.CommandText = "SET autocommit = 0";
command.executeNonQuery();
因此这段代码确实适用于交易。
关于c# - MySQL 中的事务 - 无法回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5332374/