После прочтения вашего вопроса я еще больше убежден в том, что опубликованный мною комментарий действительно является проблемой. Вы сказали в своем вопросе, что ваше количество не уменьшается. Если вы посмотрите на возвращаемое значение из строки:
cmd.ExecuteNonQuery();
в вашем операторе else, я полагаю, вы получите значение 0. Это означает, что записи не обновлялись. Я считаю, что проблема в точности связана с вашим запросом. Если вы подключаетесь к своей базе данных с помощью такой утилиты, как LINQPad или Sql Management studio, и запускаете запрос, который вы указали в своем коде, я думаю, вы обнаружите, что он ничего не обновляет. Я очень подозреваю, что ваш инвентарь не хранится в таблице с именем tblContacts
. Вот почему вы не можете выбрать количество или обновить количество в нем.
Edit:
Имел в виду упомянуть об этом сначала, а затем отвлекся и забыл добавить его. Я бы поместил ваш SqlCommand в оператор использования. Объект SqlCommand является одноразовым, поэтому рекомендуется размещать одноразовые объекты в операторе using или в некотором виде шаблона try / finally, где их можно очистить.
Дополнительное редактирование - реструктуризация вашего кода:
cs.Open();
int remainingStock = 0;
string Query = "SELECT QTY from tblInventory WHERE ID=19";
using(SqlCommand cmd = new SqlCommand(Query, cs))
{
var result = cmd.ExecuteScaler();
if (result != null)
{
string str = result.ToString();
if (!string.isNullOrWhiteSpace(str))
{
// NOTE: It would probably be safer to use int.TryParse here
remainingStock = Convert.ToInt32(cmd);
}
if (remainingStock == 0)
{
lbqty.Text = "Not enough stocks.";
}
else
{
cmd.CommandText = "UPDATE tblInventory SET QTY = QTY-1 WHERE ID=19";
int rowsUpdated = cmd.ExecuteNonQuery();
remainingStock--;
if (remainingStock == 1)
{
lbqty.Text = "Re-order. Remaining stocks: 1";
}
else
{
string remaining = "Remaining stocks: " + remainingCount.ToString();
txtQty.Text = remaining;
lbqty.Text = remaining;
}
}
}
else
lbqty.Text = "No stock for contact";
}
dgUpdate();
}
cs.Close();