#c# #sql-server #tsql
Вопрос:
Когда я нажимаю кнопку, она не выдает ошибок, но в базе данных ничего не изменилось
protected void btnBuyNow_Click(object sender, EventArgs e)
{
using (SqlConnection con = new SqlConnection(CS))
{
string id = Session["UserID"].ToString();
con.Open();
SqlCommand cmd = con.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "UPDATE tblProducts SET PQuantity=t1.PQuantity-t2.Quantity FROM tblOrderProducts t2 INNER JOIN tblProducts t1 ON t2.OrderProID=t1.PID";
cmd.ExecuteNonQuery();
Response.Redirect("OrderConfirmation.aspx");
con.Close();
}
}
Запрос:
UPDATE tblProducts
SET PQuantity = (t1.PQuantity - t2.Quantity)
FROM tblOrderProducts t2
INNER JOIN tblProducts t1 ON t2.OrderProID = t1.PID
Комментарии:
1. В какой момент вы создаете свой заказ (т. Е. Фактически добавляете запись в
tblOrderProducts
). Я бы ожидал, что порядок исполнения будет 1. Создайте свой заказ (угадайте вtblOrders
) 2. Добавьте заказанные продукты 3. Обновите количество, используя только только что созданные записи.2. С учетом сказанного, управление вашими количествами таким образом-это не тот подход, которым я бы подошел к этому. Если вы отслеживаете свои покупки и продажи, то ваши текущие запасы (или запасы на любую заданную дату в прошлом) могут быть рассчитаны на основе этих двух таблиц, и вам не нужно беспокоиться о сохранении столбца количества для ваших продуктов.
3. Если вы все еще находитесь на этапе разработки своей базы данных, я бы очень рекомендовал не использовать
tbl
префикс. Хотя это субъективно и ваш выбор, общее мнение таково, что это не добавляет ничего, кроме ненужного шума в ваш SQL — Действительно ли добавление префикса » tbl’ к именам таблиц является проблемой?4. Начните все сначала — и обратите внимание на все предложения и замечания, сделанные по вашим предыдущим вопросам. Вы просто НЕ учитесь хорошим привычкам и НЕ думаете о своем коде. Здесь ваш код подразумевает, что пользователь работает с корзиной (или, по крайней мере, с определенным товаром). Ваш код должен сначала создать заказ на покупку, а затем вычесть соответствующую сумму из вашего инвентаря для этого продукта . Ваш код обновляет КАЖДЫЙ ПРОДУКТ из каждого заказа. Вы, по крайней мере, использовали правильный подход в своем предыдущем вопросе.
Ответ №1:
Попробуйте с:
UPDATE t1
SET PQuantity = (t1.PQuantity - t2.Quantity)
FROM tblProducts AS t1, tblOrderProducts AS t2
WHERE t2.OrderProID = t1.PID
Комментарии:
1. Использование соединений в старом стиле всеми не рекомендуется
Ответ №2:
Я думаю, что использование подзапроса полезно для вас
UPDATE
SET PQuantity = (select PQuantity FROM tblProducts Where PID =t2.OrderProID ) - t2.Quantity)
FROM tblOrderProducts t2