它就像在线购物网站。
在product_details.aspx
页面上,我有一个数量textbox
,用户在其中输入产品数量。我要做的是,如果用户输入的数量不超过库存中的可用数量,那么它必须向我们显示“对不起,我们没有更多库存数量!”的消息。为此,我写了以下代码。
if (e.CommandName == "AddCart")
{
var lblProID = ((Label)e.Item.FindControl("lblProID")).Text;
var lblProName = ((Label)e.Item.FindControl("lblProName")).Text;
var lblProPrice = ((Label)e.Item.FindControl("lblProPrice")).Text;
int i = int.Parse(TextBox1.Text); // Storing textbox value in "i"
var SessionId = Session.SessionID;
// Getting total Qty against selected Pro_ID
SqlCommand cmd1 = new SqlCommand(" SELECT SUM(Qty) AS Quantity FROM [NewImport_DB].[dbo].[Stock] where [Pro_ID] = '" + lblProID + "' ", con);
con.Open();
DataTable dt = new DataTable();
SqlDataAdapter adapter = new SqlDataAdapter(cmd1);
adapter.Fill(dt);
// Checking if Qty in stock is less then qty written in Textbox then....
if (dt.Rows.Count < i)
{
lblQty.Text = "Sorry, we have no more quantity available in Stock!";
}
else
{
Session["Get_Pro_ID"] = lblProID;
con.Open();
SqlCommand cmd = con.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "Insert into [NewImport_DB].[dbo].[Cart_Tbl] values('" + SessionId + "', '" + lblProID + "', '" + lblProName + "', '" + lblProPrice + "', '" + i + "')";
cmd.ExecuteNonQuery();
con.Close();
Response.Redirect("cart.aspx");
}
con.Close();
}
股票表Stock [Stock_ID] ,[Pro_ID] ,[Warehouse_ID] ,[Qty] ,[Status]
产品表Products SELECT [Pro_ID]
,[Pro_Name]
,[Cmp_ID]
,[Cat_ID]
,[Code]
,[Serial_No]
,[Size]
,[Color]
,[Unit_Price]
,[FileName]
,[FilePath]
这是product_details.aspx页面图片......
答案 0 :(得分:1)
由于您的DataTable将始终返回1行,因此您可以使用ExecuteScalar代替,因为您要返回单行&amp;列。
con.Open();
int TotalQuantity = (int)cmd1.ExecuteScalar();
if (TotalQuantity < i)
此外,请注意您的查询已针对SQL Inject attack开放。您应该使用参数化查询。
如果您想坚持使用当前的方法(不需要恕我直言),那么您可以这样做: -
DataTable dt = new DataTable();
SqlDataAdapter adapter = new SqlDataAdapter(cmd1);
adapter.Fill(dt);
int TotalQuantity = (int)dt.Rows[0]["Quantity"];