protected void btnBuyNow_Click(object sender, EventArgs e)
{
Int32 UserID = Convert.ToInt32(Session["USERID"].ToString());
int PID = Convert.ToInt32(Request.QueryString["PID"]);
using (SqlConnection con = new SqlConnection(CS))
using (SqlCommand cmd = new SqlCommand("SP_UpdateProducts", con) { CommandType = CommandType.StoredProcedure })
{
DataTable dt = new DataTable();
using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
{
sda.Fill(dt);
}
foreach (DataRow row in dt.Rows)
{
int myQty = row.Field<int>("Qty");
int PQuantity = row.Field<int>("PQuantity");
if (myQty < PQuantity)
{
int updateQty = row.Field<int>("Qty");
cmd.Parameters.AddWithValue("@Quantity", PQuantity - updateQty);
cmd.Parameters.AddWithValue("@PID", PID);
cmd.ExecuteNonQuery();
con.Open();
Response.Redirect("OrderConfirmation.aspx");
}
}
}
}
SP_UpdateProducts
:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[SP_UpdateProducts]
(@PID int,
@Quantity int)
AS
BEGIN
SET NOCOUNT ON;
UPDATE tblProducts
SET PQuantity = @Quantity
WHERE PID = @PID
END
- [Updated]SqlDataAdapter支持本文档中所写的Insert、Update和Delete命令。对于当前场景,您不必使用SqlDataAdapter
- 在执行
ExceuteNonQuery()
之前,您需要确保连接已打开 updateQty
很奇怪,你从数据库中得到数量。不确定你想达到什么目的- 停止使用
.AddWithValue()
- 归功于@marc_s,您不应该用前缀"命名存储过程;sp_">
- 对于存储过程,您需要更改脚本以获得当前的
PQuantity
和传入的Quantity
后端(.aspx。cs(代码:
protected void btnBuyNow_Click(object sender, EventArgs e)
{
Int32 UserID = Convert.ToInt32(Session["USERID"].ToString());
int PID = Convert.ToInt32(Request.QueryString["PID"]);
int qty = /* Expected qty to be deducted in product */
using (SqlConnection con = new SqlConnection(CS))
{
con.Open();
using (SqlCommand cmd = new SqlCommand("UpdateProducts", con))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@Quantity", SqlDbType.int).Value = updateQty;
cmd.Parameters.Add("@PID", SqlDbType.int).Value = PID;
cmd.ExecuteNonQuery();
Response.Redirect("OrderConfirmation.aspx");
}
}
}
存储过程:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE OR ALTER PROCEDURE [dbo].[UpdateProducts]
(@PID int,
@Quantity int)
AS
BEGIN
SET NOCOUNT ON;
UPDATE tblProducts
SET PQuantity = PQuantity - @Quantity
WHERE PID = @PID
END