计算总数量并将其与asp.net中的库存表进行匹配

时间:2015-10-25 16:24:14

标签: c# sql asp.net sql-server-2008

它就像在线购物网站。 在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页面图片......

product_details.aspx

1 个答案:

答案 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"];