ASP.NET MySQL更新了多条记录

时间:2011-09-28 07:01:10

标签: asp.net mysql transactions

我有一个需要更新多条记录的网页。此页面获取所有信息,然后开始向数据库发送多个UPDATE查询的事务。

foreach row
{
Prepare the query
 Hashtable Item = new Hashtable();
 Item.Add("Id", Id);
 Item.Add("Field1", Field1);
 Item.Add("Field2", Field2);
 Item.Add("Field3", Field3);
...
}

然后我们启动ytransaction DO CHANGES()

public void execute_NonQuery_procedure_transaction(string StoredProcedure, List<Hashtable> Params)
{
    using (MySqlConnection oConnection = new MySqlConnection(ConfigurationManager.AppSettings[DB]))
    {
        MySqlTransaction oTransaction;
        bool HasErrors = false;

        oConnection.Open();
        oTransaction = oConnection.BeginTransaction();

        try
        {
            MySqlCommand oCommand = new MySqlCommand(StoredProcedure, oConnection);
            oCommand.CommandType = CommandType.StoredProcedure;
            oCommand.Transaction = oTransaction;

            foreach (Hashtable hParams in Params)
            {
                oCommand.Parameters.Clear();

                IDictionaryEnumerator en = hParams.GetEnumerator();
                while (en.MoveNext())
                {
                    oCommand.Parameters.AddWithValue("_" + en.Key.ToString(), en.Value);
                    oCommand.Parameters["_" + en.Key.ToString()].Direction = ParameterDirection.Input;
                }

                oCommand.ExecuteNonQuery();

            }
        }
        catch (Exception e)
        {
            HasErrors = true;
            throw e;
        }
        finally
        {
            if (HasErrors) 
                oTransaction.Rollback();
            else
                oTransaction.Commit();

            oConnection.Close();
        }
    }
}

还有其他方法可以做到这一点,或者这是最有效的方法吗?

2 个答案:

答案 0 :(得分:2)

这取决于具体情况,例如,如果您有多行更新或添加新行或删除某些行或这些行的组合,这会修改数据库表,那么执行此操作的有效方法是进行批量更新。

请浏览此链接Batch Update

希望这会有所帮助......

答案 1 :(得分:1)

它看起来很好,你最终可能不会清除Command.Parameters列表,但只是在后续迭代中分配值,但这可能导致没有明显的改进。

注意你的投掷是错误的,在C#中不要使用throw e;而只是throw;