我正在编写一个需要更新MySQL数据库的应用程序。我现在正在做的是从表中删除行,然后插入新数据,因此我正在使用事务来确保获得全部或全部更改。但是,什么都没有改变,我不知道为什么,因为没有抛出异常。
这是交易的代码片段:
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语句可以工作,因为在将其更改为事务之前,我已经对其进行了较早的测试。
最佳答案
您必须使用Commit或Rollback方法显式提交或回滚事务。Source
因此,
trans.Commit();
在您的try块的末尾。
关于c# - 为什么我的交易不更改数据库?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26846026/