Qty Control in C#

后端 未结 5 960
-上瘾入骨i
-上瘾入骨i 2021-01-27 07:50

pstrjds, From the code you have provided I am trying to implement that code and the msdn link you provided couple of days ago. I am not sure how to put it together but I am see

相关标签:
5条回答
  • 2021-01-27 08:05

    The problem is that you don't check for the case where ret == -1. Changing your second if-statement to if(ret < 1) should fix your issue.

    Also, directly after the line cmd.ExecuteNonQuery(); add ret--; to sync the ret variable with the value that is now in the database.

    0 讨论(0)
  • 2021-01-27 08:05

    Your application flow should be as following;

    protected void Button1_Click(object sender, EventArgs e)
        {
            SqlConnection c = new SqlConnection("Data Source=.; Integrated Security=SSPI; Initial Catalog=FA");
    
    
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = c;
            c.Open();
    
            // get remaining stocks
            cmd.CommandText = "SELECT Qty from TEST WHERE Id=1";
            int ret = Convert.ToInt32(cmd.ExecuteScalar().ToString());
    
            if (ret == 0)
            {
                Label1.Text = "Not enough stocks.";
            }
            else 
            {
                cmd.CommandText = "UPDATE TEST SET Qty = Qty-1 WHERE Id=1";
                cmd.ExecuteNonQuery();
    
                if (ret == 2)
                {
                    Label1.Text = "Re-order. Remaining stocks: 1";
                }
                else
                {
                    Label1.Text = "Remaining stocks: " + (ret-1).ToString();
                }
            }
    
    
            c.Close();
        }
    
    0 讨论(0)
  • 2021-01-27 08:06

    The fist thing i can see is that this in not right

     if (ret == 1)
            {
                lbqty.Text = "Re-order. Remaining stocks: 1";
                dgUpdate();
            }
            else
    

    should be

     if (ret - 1  == 1)
            {
                lbqty.Text = "Re-order. Remaining stocks: 1";
                dgUpdate();
            }
            else
    

    because when the value you read is 1 and you decrease it its 0.

    0 讨论(0)
  • 2021-01-27 08:15

    I think this is your problem - you make ret - 1 while processing and then

    txtQty.Text = "Remaining stocks: " + (ret - 1).ToString();
    lbqty.Text = "Remaining stocks: " + (ret - 1).ToString();
    

    that shows one less item. Try making it:

    txtQty.Text = "Remaining stocks: " + ret.ToString();
    lbqty.Text = "Remaining stocks: " + ret.ToString();
    
    0 讨论(0)
  • 2021-01-27 08:22

    After reading your question again, I am more convinced that the comment I posted is actually the problem. You said in your question that your quantity is not going down. If you look at the return value from the line:

    cmd.ExecuteNonQuery();
    

    in your else statement I believe you will get a value of 0. This indicates that no records where updated. I believe the problem is exactly related to your query. If you connect to your database with a utility such as LINQPad or the Sql Management studio and run the query you have listed in your code I think you will find it is not updating anything. I highly suspect that your inventory is not being stored in a table called tblContacts. Which is why you can't select a quantity from it nor update a quantity in it.

    Edit: Meant to mention this initially and then got sidetracked and forgot to add it. I would put your SqlCommand in a using statement. The SqlCommand object is disposable and so it is good practice to place disposable objects in a using statement or in some sort of try/finally pattern where they can be cleaned up.

    Additional edit - restructuring your code:

        cs.Open();
        int remainingStock = 0;
        string Query = "SELECT QTY from tblInventory WHERE ID=19";
        using(SqlCommand cmd = new SqlCommand(Query, cs))
        {
            var result = cmd.ExecuteScaler();
            if (result != null)
            {
                string str = result.ToString();
                if (!string.isNullOrWhiteSpace(str))
                {
                    // NOTE: It would probably be safer to use int.TryParse here
                    remainingStock = Convert.ToInt32(cmd);
                }
    
                if (remainingStock == 0)
                {
                    lbqty.Text = "Not enough stocks.";
                }
                else
                {
                    cmd.CommandText = "UPDATE tblInventory SET QTY = QTY-1 WHERE ID=19";
                    int rowsUpdated = cmd.ExecuteNonQuery();
                    remainingStock--;
    
                    if (remainingStock == 1)
                    {
                        lbqty.Text = "Re-order. Remaining stocks: 1";
                    }
                    else
                    {
                        string remaining = "Remaining stocks: " + remainingCount.ToString();
                        txtQty.Text = remaining;
                        lbqty.Text = remaining;
                    }
                }
            }
            else
                lbqty.Text = "No stock for contact";
            }
    
            dgUpdate();
        }
        cs.Close();
    
    0 讨论(0)
提交回复
热议问题