首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET MySQL更新多条记录

问ASP.NET MySQL更新多条记录
EN

Stack Overflow用户
提问于 2011-09-28 15:01:10
回答 2查看 451关注 0票数 0

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

代码语言:javascript
复制
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()

代码语言:javascript
复制
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();
        }
    }
}

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-28 15:25:35

这取决于具体情况,例如,如果您有多个行更新、添加新行、删除一些行或这些操作的组合,那么修改数据库表的有效方法就是使用批处理更新……

请通过此链接Batch Update

希望这能帮到你。

票数 2
EN

Stack Overflow用户

发布于 2011-09-28 15:18:16

在我看来这很好,你最终可以不清除Command.Parameters列表,而只是在随后的迭代中赋值,但这可能不会带来明显的改进。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7579421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档