ASP.NET MySQL обновляет несколько записей

#asp.net #mysql #transactions

#asp.net #mysql #транзакции

Вопрос:

У меня есть веб-страница, на которой необходимо обновить несколько записей. Эта страница получает всю информацию, а затем начинает транзакцию, отправляющую несколько запросов на ОБНОВЛЕНИЕ в базу данных.

 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
ДЕЛАТЬ ИЗМЕНЕНИЯ ()

 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();
        }
    }
}
  

Есть ли другой способ сделать это или это наиболее эффективный способ?

Ответ №1:

Это зависит от ситуации, например, если у вас есть несколько обновлений строк или добавление новых строк или удаление некоторых строк или их комбинация, что изменяет таблицу базы данных, то эффективный способ сделать это — выполнить пакетное обновление…

Пожалуйста, перейдите по этой ссылке Пакетное обновление

Надеюсь, это поможет…

Ответ №2:

для меня это выглядит нормально, в конечном итоге вы можете не очистить команду.Список параметров, но просто присваивает значения на следующих итерациях, но, вероятно, это не приводит к видимым улучшениям.

обратите внимание, что ваш бросок неверен, в C # не используйте throw e; , а просто throw; .