【发布时间】:2014-09-09 03:19:09
【问题描述】:
所以我一直在用这段代码进行测试:
MySqlTransaction trans = null;
var con = new MySqlConnection(DBInfo.CON_STRING);
try
{
con.Open();
trans = con.BeginTransaction();
var query = "INSERT INTO test (num) VALUE (@val1)";
var cmd = new MySqlCommand(query, con);
cmd.Transaction = trans;
cmd.Prepare();
cmd.Parameters.AddWithValue("@val1", 0);
for (int i = 0; i <= 15; i++)
{
cmd.Parameters["@val1"].Value = i;
cmd.ExecuteNonQuery();
if (i == 10)
{
//throw new DivideByZeroException();
MessageBox.Show("pause");
}
}
trans.Commit();
}
catch (Exception ex)
{
MessageBox.Show(ex.StackTrace);
try
{
if (trans != null) trans.Rollback();
}
catch (Exception ex1)
{
MessageBox.Show(ex1.Message);
}
}
finally
{
con.Close();
}
提交和回滚方法。我有一个问题。在for 块中,我有一个消息框来暂停代码的执行,这样我就可以停止程序来模拟程序的突然执行。问题是查询没有提交,但是服务器发生了什么?它会自动回滚吗?例如,如果运行程序的 PC 恰好是服务器并且停电,会发生什么情况? (假设停电发生在执行for 块的过程中。
【问题讨论】:
-
FWIW:使用
using(如果 MySQL 驱动程序支持,则使用 TransactionScope)。请注意,这个可能的答案取决于 MySQL 事务中涉及的表(InnoDB - 好,MyISAM - 坏)。但是,除非所有这些......当连接终止时,显式启动的事务(请参阅自动提交事务!)未提交的事务会隐式回滚。 -
@user2864740 他支持
-
@IVAAAN123 很高兴知道这一点。我总是“卡”在 SQL Server 上。
标签: c# mysql visual-studio transactions