我正在编写一个需要更新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/

10-13 08:27
查看更多