2016-10-05 3 views
2
OleDbCommand cmd = new OleDbCommand("SELECT Stock FROM Products WHERE ID=" + ProductID + ";", conn); //run the database query 
OleDbDataReader cusReader = cmd.ExecuteReader(); //read the result of the query 
cusReader.Read();   
ProductStock = (int)cusReader.GetValue(0); 
cusReader.Close(); 
MessageBox.Show((ProductStock).ToString()); // checks that the form is being accessed and the SELECT query works 

OleDbCommand cmd1 = new OleDbCommand("UPDATE Products SET Stock=" + (ProductStock - 1) + "WHERE ID= " + ProductID +";", conn); 

try 
{ 
    if (cusReader.RecordsAffected > 0) 
    { 
     MessageBox.Show("no issue was experienced"); 
    } 
    else 
    { 
     MessageBox.Show("An issue occured when decreasing stock"); 
    } 
    cusReader.Close(); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show("An error occured in query.\n" + ex.Message); 
} 

Запрос на обновление возвращает сообщение об ошибке «Проблема возникла». Поле сообщения, которое показывает переменную Productstock, вернет правильное значение. Может ли кто-нибудь объяснить, как решить эту проблему?Ошибка при возврате запроса SQL Update

+3

Вы даже выполняете заявление об обновлении? – Dirk

+1

Вы можете вызвать 'ExecuteNonQuery' на' cmd1'. Наверное, это то, что имел в виду @Dirk. –

+0

код, который не работает, был скопирован слово в слово из запроса на обновление, который работал отлично, поэтому я предполагаю, что у меня есть – Nic

ответ

2

Поставьте здесь место прямо перед WHERE в + "WHERE ID= " +

Кроме того, убедитесь, что вы звоните ExecuteNonQuery на cmd1.

+0

К сожалению, это не помогло мне – Nic

0
OleDbCommand cmd1 = new OleDbCommand("UPDATE Products SET Stock=" + (ProductStock - 1) + " WHERE ID= " + ProductID +";", conn); 

Используйте вышеуказанную команду.

Проблема: Нет место между стоимостью акций и где

0

Пожалуйста, попробуйте this.It должно работать

OleDbCommand cmd1 = new OleDbCommand("UPDATE Products SET Stock=" + (ProductStock - 1) + " WHERE ID= " + ProductID, conn); 
0

Try обновление в один идти (не отделяет select и update: кто-то может изменить данные после Вы сделали select, но до вы начали update), а затем проверить затронутые строки. Сделайте так, чтобы sql был , читаемый, чтобы избежать очевидных ошибок.

string sql = 
    // Parametrize your query or at least format it out: 
    [email protected]"update Products 
     set Stock = Stock - 1 
     where Id = {ProductId} and 
      Stock >= 1 -- added: you must have stock to decrease"; 

// Wrap IDisposable into using 
using (OleDbCommand cmd = new OleDbCommand(sql, conn)) { 
    int affected = cmd.ExecuteNonQuery(); 

    if (affected > 0) 
    MessageBox.Show("No issue was experienced"); 
    else 
    MessageBox.Show("An issue occured when decreasing stock"); 
} 
Смежные вопросы