我试着研究过这个话题,但没有任何意义。我有一些代码试图执行一个UPDATE查询,然后遍历另一组插入查询。第二个查询出错,因为我省略了参数(这是故意造成错误的)。更新仍然被提交,即使它不应该被提交...
这是代码……
using (MySqlConnection con = existingCon.Clone())
{
con.Open();
MySqlParameter paramTimeStamp;
MySqlParameter paramFileNo;
MySqlParameter paramDescription;
MySqlParameter paramComment;
MySqlParameter paramUserInfo;
MySqlParameter paramPaymentType;
MySqlParameter paramSeriesLink;
MySqlParameter paramOriginalSubmitDate;
using (MySqlTransaction transact = con.BeginTransaction())
{
try
{
using (
MySqlCommand cmd =
new MySqlCommand(
"UPDATE Payments "
+ "SET strStatus = 'processing-preupload' "
+ "WHERE strStatus = 'processing-prepost';",
con))
{
cmd.Transaction = transact;
cmd.ExecuteNonQuery();
}
}
catch (Exception e)
{
transact.Rollback();
throw;
}
foreach (Payment payment in payments)
{
try
{
using (
MySqlCommand cmd =
new MySqlCommand(
"INSERT INTO Activity "
+ "(dtmTimeStamp, strFileNumber, strDescription, strComment, "
+ "strUserInfo, strPaymentType, dtmSeriesLink, dtmOriginalSubmitDate) "
+ "VALUES (@paramTimeStamp, @paramFileNo, @paramDescription, @paramComment, "
+ "@paramUserInfo, @paramPaymentType, @paramSeriesLink, @paramOriginalSubmitDate);",
con))
{
paramTimeStamp = new MySqlParameter("@paramTimeStamp", DateTime.Now);
paramFileNo = new MySqlParameter("@paramFileNo", payment.strFileNumber);
paramDescription = new MySqlParameter("@paramDescription", description);
paramComment = new MySqlParameter("@paramComment", comment);
paramUserInfo = new MySqlParameter("@paramUserInfo", userInfo);
paramPaymentType = new MySqlParameter("@paramPaymentType", PAYMENT_TYPE);
paramSeriesLink = new MySqlParameter(
"@paramSeriesLink",
payment.strSeriesLink_corrected);
paramOriginalSubmitDate = new MySqlParameter(
"@paramOriginalSubmitDate",
payment.strSubmitDate_corrected);
cmd.Transaction = transact;
cmd.ExecuteNonQuery();
}
}
catch (Exception e)
{
transact.Rollback();
throw;
}
}
transact.Commit();
}
}有什么想法?
发布于 2013-05-02 22:06:02
有两个想法:第一,
在MySQL中,只有InnoDB和BDB (BerkeleyDB)表格式支持事务。其他标准存储引擎会忽略事务,并且不能回滚数据修改。
所以..。您使用的是什么表格格式?
其次:您可以尝试使用接受IsolationLevel的重载,只是为了明确-但我怀疑表格式才是真正的问题所在。
发布于 2015-03-28 18:39:45
也许这能帮到什么人。
一些旧版本的连接器(我认为是6.4.4左右)会在查询错误后自动回滚事务。这似乎不是最新版本(6.9.6)的情况。
“有趣的是,它似乎能工作,但又停了下来”,这让我很好奇。
https://stackoverflow.com/questions/16339851
复制相似问题