Я хочу обновить ~ 50 строк. Так что я делаю это в foreach Код работает без ошибок, но в базе данных изменений нет.C# MySQL Transaction commit
public void updateItems(List<product> prdList)
{
MySqlTransaction tr = null;
try
{
tr = this.con.BeginTransaction();
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = con;
cmd.Transaction = tr;
foreach (product prd in prdList)
{
cmd.CommandText = "UPDATE products SET title='@title', quantity='@quantity' WHERE itemId LIKE '@itemId'";
cmd.Parameters.AddWithValue("@title", prd.title);
cmd.Parameters.AddWithValue("@quantity", prd.quantity);
cmd.Parameters.AddWithValue("@itemId", prd.itemId);
cmd.ExecuteNonQuery();
}
tr.Commit();
}
catch (MySqlException ex)
{
try
{
tr.Rollback();
}
catch (MySqlException ex1)
{
MessageBox.Show(ex1.ToString());
}
MessageBox.Show(ex.ToString());
}
}
Если я печатаю строку запроса и запускаю ее на SQL-Bash, она отлично работает.
Вы цитируете свои параметры. это не правильно. параметр входит в «голый», никогда не цитируемый. 'set title = @ title', а не' set title = '@ title''. –
И не используйте 'AddWithValue', укажите конкретные типы, которые вы добавляете. – DavidG