【发布时间】:2021-08-12 14:24:31
【问题描述】:
当我点击按钮时,它没有错误,但数据库没有改变任何东西
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
【问题讨论】:
-
您在什么时候创建您的订单(即实际添加一条记录到
tblOrderProducts)。我希望执行顺序是 1. 创建您的订单(在tblOrders中猜测) 2. 添加您的订单产品 3. 仅使用您刚刚创建的记录更新您的数量。 -
话虽如此,以这种方式管理您的数量并不是我会采用的方式。如果您跟踪您的购买和销售,那么您当前的库存(或过去任何给定日期的库存)可以根据这两个表计算,您无需担心根据您的产品。
-
如果您还处于数据库设计阶段,我真的建议您不要使用
tbl前缀。虽然它是主观的并且是您的选择,但普遍的共识是它只会给您的 SQL 添加不必要的噪音 - Is adding the ‘tbl’ prefix to table names really a problem? -
重新开始 - 并注意对您之前的问题提出的所有建议和 cmet。你只是没有学习好习惯,也没有考虑你的代码。在这里,您的代码暗示用户正在使用购物车(或至少是特定商品)。您的代码应该首先为购买创建订单,然后从您的库存中为该产品扣除适当的金额。您的代码会更新每个订单的每个产品。您至少在上一个问题中使用了正确的方法。
标签: c# sql-server tsql