我花了一周的时间试图让事务为我的 MySQL 数据库工作。仍然没有成功。运行Windows 7 x64,MySQL Server 5.6.7-rc和MySQL .NET Connector 6.6.4。
MySQL 声称它TransactionScope是受支持的(我现在已经阅读了整个 Internet),所以我猜我需要一些特殊的配置才能让它工作。这是我到目前为止所尝试的:
自动提交=0
- 在
my.ini我autocommit=0在该部分下方添加[mysqld]。 - 在
my.ini我init_connect='SET autocommit=0'在该部分下方添加[mysqld]。 - 在 Service Manager 中,我已将其添加
--autocommit=0为命令行参数。 - 我已经验证
SELECT @@autocommit返回 0。
sql_mode=传统
- 在
my.ini我sql-mode="TRADITIONAL"在该部分下方添加[mysqld]。 - 在 Service Manager 中,我已将其添加
--sql-mode=TRADITIONAL为命令行参数。
分布式事务协调器
- 我试过启用/禁用 DTC 服务。
下面的示例在调用时立即引发异常(System.Transactions.TransactionException必须通过 Ctr+Alt+E 启用异常)Open()。错误消息是操作对于事务的状态无效。. 显然,服务器对事务的东西不满意——这可以通过没有发生回滚的事实来证明。
var factory = System.Data.Common.DbProviderFactories.GetFactory("MySql.Data.MySqlClient");
using (var transaction = new System.Transactions.TransactionScope())
{
var connection = factory.CreateConnection();
connection.ConnectionString = "Server=localhost;Port=3306;Database=test;User ID=user;Password=user";
connection.Open(); // <-- silent TransactionException here!
var command = connection.CreateCommand();
command.CommandText = "CREATE TABLE TestTable (ID INT) ENGINE = InnoDB DEFAULT CHARSET=utf8;";
command.ExecuteNonQuery();
command.CommandText = "INSERT INTO TestTable (ID) VALUES (123);";
command.ExecuteNonQuery();
// ATTENTION! This should imply a rollback!
// transaction.Complete();
}
示例代码适用,SQL Server所以我确定这个问题与MySQL.
问:我什么都试过了。我需要做什么才能使此TransactionScope代码起作用MySQL?