Сравнение данных текстового поля с базой данных и обновленной базой данных с новым значением

Я пытаюсь сравнить значение текстового поля с данными в базе данных, и если значение в текстовом поле больше, чем значение данных в базе данных, появится предупреждающее сообщение и если оно будет меньше, чем значение данных в дате базы, он будет вызывать значение базы данных со значением текстового поля и обновлять значение базы данных. нет ошибки, но когда я нажимаю кнопку, ничего не появляется и никаких изменений в базе данных не происходит. что-то не так с моим кодом? спасибо

protected void btn_buy_Click(object sender, EventArgs e)
{


 hookUp = new SqlConnection("Server=localhost\\SqlExpress;Database=VoteNow;" +
 "Integrated Security=True" );
 sqlCmd = new SqlCommand("SELECT UnitAvailable FROM stockdetails1 WHERE StockID = 3", hookUp);
 hookUp.Open();
 reader = sqlCmd.ExecuteReader();
 int amountkey;
 amountkey = Convert.ToInt32(amount.Text);
 while (reader.Read())
 {
 int unitavailable = reader.GetInt32(0);
 int unitavailable1;
 if (amountkey <= unitavailable)
 {
 unitavailable1 = unitavailable - amountkey;
 SqlCommand sqlupdateCmd = new SqlCommand("UPDATE StockDetails Set UnitAvailable = '+unitavailable1+' WHERE StockID = 3", hookUp);

 sqlupdateCmd.ExecuteNonQuery();

 Response.Write(""); 
 }
 else 
 {
 Response.Write("");

 }
 }
 reader.Close();
 hookUp.Close();
}

}

2 ответа

После выполнения команды обновления отсутствует sqlupdateCmd.ExecuteNonQuery(). Кроме того, я не понимаю, почему вы сообщаете то же самое сообщение снова в else блоке кода? Другое дело, вероятно, UnitAvailable - это одно значение, поэтому вместо использования ExecuteReader использовать ExecuteScalar.

Кроме того, подумайте о том, как реализовать свой код с using который будет располагать такими дорогостоящими ресурсами, как подключение и объекты команд. Пожалуйста, проверьте это для получения более подробной информации.

Ваш Javascript alert shoul выглядит так:

Response.Write("");

Обновление 2:

Пожалуйста, используйте ExecuteScalar как я упомянул выше:

sqlCmd = new SqlCommand("SELECT UnitAvailable FROM StockDetails WHERE StockID = 3", hookUp);
hookUp.Open();
int unitavailable = Convert.ToInt32(sqlCmd.ExecuteScalar());
int amountkey;
amountkey = Convert.ToInt32(amount.Text);
int unitavailable1;
if (amountkey <= unitavailable)
{
 Response.Write("");
}
else
{
 unitavailable1 = unitavailable - amountkey;
 SqlCommand sqlupdateCmd = new SqlCommand("UPDATE StockDetails Set UnitAvailable = @unitavailable1 WHERE StockID = 3", hookUp);
 sqlupdateCmd.Parameters.Add("@unitavailable1",SqlDbType.Int).Value = unitavailable1;
 sqlupdateCmd.ExecuteNonQuery();
}


Надеюсь, вам нужно внести два изменения в код.

  1. U должен добавить ExecuteNonQuery после оператора обновления.
  2. Также переменная unitavailable1, которая является новой доступной единицей, была предоставлена в котировках... возможно, значение не заменяется. Попытайтесь закрыть кавычки до этого и откройте его после переменной и используйте "+", чтобы объединить их так

Msgstr "" "".

Попробуйте это... Надеюсь, это сработает...

licensed under cc by-sa 3.0 with attribution.