2014-08-30 4 views
0

Следующий код работает, я получаю сообщение о том, что продукт обновлен, однако никаких изменений в базе данных не производится.C# executenonquery не обновляет базу данных

Это было скопировано и вставлено из другого метода, который работает в одной базе данных, и этот метод работает нормально.

private void btnProductSave_Click(object sender, EventArgs e) 
    { 
     if (txtProductName.Text != "") 
     { 
      var confirmResult = MessageBox.Show("Are you sure you want to save changes to this product?", "Confirm Save", MessageBoxButtons.YesNo); 
      if (confirmResult == DialogResult.Yes) 
      { 
       SqlConnection con = null; 
       con = new SqlConnection(ConfigurationManager.ConnectionStrings["PVAdmin.Properties.Settings.PricerConnectionString"].ConnectionString); 
       string sql2 = "UPDATE Products SET productName = @productName WHERE productID = @productID"; 

       SqlCommand myCommand2 = new SqlCommand(sql2, con); 
       myCommand2.Parameters.AddWithValue("@productName", txtProductName.Text); 
       myCommand2.Parameters.AddWithValue("@productID", lblProductID.Text); 

       con.Open(); 
       myCommand2.ExecuteNonQuery(); 
       con.Close(); 

       MessageBox.Show("Product saved."); 
       this.LoadProduct((int)cboProductSelect.SelectedValue); 
      } 
      else 
      { 
       MessageBox.Show("No changes were saved."); 
      } 
     } 
    } 

ответ

1

Я видел это раньше, и что он заканчивает тем, что движок sql, кажется, обновляет себя. Поскольку ваш @parm совпадает с столбцом, sql говорит обновить меня со мной.

Чтобы исправить, попробуйте НЕМНОГО переименование таких параметров, как

UPDATE Products SET productName = @pProductName WHERE productID = @pPproductID"; 
myCommand2.Parameters.AddWithValue("@pProductName", txtProductName.Text); 
myCommand2.Parameters.AddWithValue("@pProductID", lblProductID.Text); 

таким образом, SQL не имеет столбец «pProductName» и в самом деле, перейти к параметру ... также с «pProductID» , Очень тонкий, но, вероятно, именно то, с чем вы сталкиваетесь. Кроме того, к какой базе данных вы подключаетесь. Различные двигатели используют разные символы токена для передачи параметров ... "?", "@", ":" Как только несколько я знаю ...

+0

Я использую Sql Server. Я пробовал это, но результаты те же. Это сводит меня с ума, потому что он отлично работает в другом методе, а не в этом. – Katp00p

+0

@ Katp00p, попробуйте добавить int RowsUpdated = cmd.executenonquery ... и затем messagebox the rowsUpdated значение. Вернется ли она с ожидаемым или нулевым записями. – DRapp

+0

Я понял, что проблема ... не имела никакого отношения к запросу, это значение хранилось в lblProductID. Спасибо за вашу помощь, я удалю этот вопрос, чтобы он не смутил людей в будущем. – Katp00p

Смежные вопросы