【发布时间】:2014-11-10 14:27:39
【问题描述】:
我正在编写一个需要更新 MySQL 数据库的应用程序。我现在正在做的是从表中删除行,然后插入新数据,所以我使用事务来确保我得到所有或没有更改。但是,什么都没有改变,我不知道为什么,因为没有抛出异常。
这是交易的代码sn-p:
using(var conn = new MySqlConnection(connectionString))
{
conn.Open();
// Use transaction to get all or nothing
using(var trans = conn.BeginTransaction())
{
try
{
using(MySqlCommand cmd = new MySqlCommand())
{
// Clear the current summary entries
cmd.Connection = conn;
cmd.CommandText = "DELETE FROM summaryTable WHERE projectID = @Id";
cmd.Parameters.AddWithValue("@Id", id);
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
}
// Write new entries
foreach(SummaryObject record in summaryList)
{
using(MySqlCommand cmd = new MySqlCommand())
{
cmd.Connection = conn;
cmd.CommandText = "INSERT INTO summaryTable VALUES(/*All values here*/)";
// Add With Value statements
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
}
}
}
catch(MySqlException e)
{
try
{
// try roll back
}
catch(MySqlException e1)
{
// Catch rollback fail
}
}
}
conn.Close();
}
我已经缩短了一些内容,但我知道 SQL 语句可以工作,因为我在将其更改为事务之前对它们进行了较早的测试。
【问题讨论】:
-
你有自动提交设置吗?还是您只是在事务结束时错过了提交?
-
不。我错过了提交。现在可以了。 (您应该将其作为答案而不是评论,@TheChaos)
-
看来你最后错过了
trans.Commit();。您正在创建一个事务,然后将其处理掉。
标签: c# mysql transactions