0

我如何减去程序中的数据到数据库?

我的数据库中有数量和描述。数量为 100,描述为 A。

当我这样输入我的程序时(运行程序后):数量是50。它的描述是A。

数据库:数量为50(因为减去数据库和我的程序“100 - 50 = 50”,描述仍然与A相同。

我怎么做?

提前致谢!

编辑:

我已经这样做了:

if (textBoxCodeContainer[index].TextLength != 0)
                    {
                        this.textBoxQuantityContainer[index].Value = Convert.ToDecimal(dReader["Quantity"].ToString());
                        this.textBoxDescContainer[index].Text = dReader["Description"].ToString();
                        this.textBoxSubTotalContainer[index].Text = dReader["Price"].ToString();
                    }

                    if (textBoxQuantityContainer[index].Value != 0)
                    {
                        if (textBoxQuantityContainer[index].Value >= Convert.ToDecimal(dReader["Quantity"].ToString()))
                        {
                             decimal newVal = textBoxQuantityContainer[index].Value - Convert.ToDecimal(dReader["Quantity"].ToString());
                             cmd = new OleDbCommand("UPDATE [Seranne] SET [Quantity] ='" + newVal + "' WHERE [Code] IN (");
                        }
                    }

但是当我运行程序时,加载的数量和数据库中的一模一样,但不能改变,当我输入数量为50时,程序会自动返回100(与数据库中的数量完全相同)

为什么会这样?

注意:对于文本框数量,我使用 Numeric Up Down。

编辑:完整代码如下:

        private void UpdateDatas()
        {
            int codeValue = 0;
            int index = 0;

            if (firstForm.textBox1.Text == "Seranne")
            {
                string query = "SELECT [Quantity], [Description], [Price] FROM [Seranne] WHERE [Code] IN (";

                OleDbDataReader dReader;
                OleDbConnection conn = new OleDbConnection(connectionString);
                conn.Open();

                if (int.TryParse(this.textBoxCodeContainer[0].Text, out codeValue))
                {
                    query = query + codeValue.ToString();
                }

                for (int i = 1; i < 17; i++)
                {
                    if (int.TryParse(this.textBoxCodeContainer[i].Text, out codeValue))
                    {
                        query = query + "," + codeValue.ToString();
                    }
                }

                query = query + ")";

                OleDbCommand cmd = new OleDbCommand(query, conn);

                cmd.Parameters.Add("Code", System.Data.OleDb.OleDbType.Integer);
                cmd.Parameters.Add("Quantity", System.Data.OleDb.OleDbType.Integer);

                dReader = cmd.ExecuteReader();

                while (dReader.Read())
                {
                    if (textBoxCodeContainer[index].TextLength != 0)
                    {
                        this.textBoxQuantityContainer[index].Value = Convert.ToDecimal(dReader["Quantity"].ToString());
                        this.textBoxDescContainer[index].Text = dReader["Description"].ToString();
                        this.textBoxSubTotalContainer[index].Text = dReader["Price"].ToString();
                    }

                    if (textBoxQuantityContainer[index].Value != 0)
                    {
                        if (textBoxQuantityContainer[index].Value >= Convert.ToDecimal(dReader["Quantity"].ToString()))
                        {
                             decimal newVal = textBoxQuantityContainer[index].Value - Convert.ToDecimal(dReader["Quantity"].ToString());
                             cmd = new OleDbCommand("UPDATE [Seranne] SET [Quantity] ='" + newVal + "' WHERE [Code] IN (");
                        }
                    }

                    index += 1;
                }

                dReader.Close();
                conn.Close();
            }
        }

        private void UpdatePrice()
        {
            int totalPrice = 0;
            int quantity = 0;
            int price = 0;

            for (int i = 0; i < 17; i++)
            {
                if (textBoxQuantityContainer[i].Value > 0)
                {
                    quantity = (int)textBoxQuantityContainer[i].Value;
                    price = Convert.ToInt32(textBoxSubTotalContainer[i].Text);
                    textBoxTotalContainer[i].Text = (quantity * price).ToString();
                }

                else
                {
                    textBoxSubTotalContainer[i].Text = "";
                    textBoxTotalContainer[i].Text = "";
                }
            }

            for (int i = 0; i < 17; i++)
            {
                if (textBoxTotalContainer[i].TextLength != 0)
                {
                    totalPrice += Convert.ToInt32(textBoxTotalContainer[i].Text);
                }
            }

            textBoxAllTotalContainer.Text = totalPrice.ToString("n2");
        }

        private void textBox_TextChanged(object sender, EventArgs e)
        {
            UpdateDatas();
            UpdatePrice();
        }

    }
}

这是屏幕截图: 在此处输入图像描述在此处输入图像描述

上面屏幕截图中显示的“代码”是指数据库,也是“数量”,每当我输入数据库中已有的代码时,剩余的框就会被填满。但是,当我将“数量”从 100 更改为 50 时,它会自动像刷新程序一样再次回到 100。

4

2 回答 2

0
 cmd = new oledbcommand("select qty from tablename where pid=103");
qtyval = convert.ToInt32(cmd.ExecuteScalar());
if (qtyval != 0 )
{
if (qtyval >= convert.toint32(txtqty.text))
{
newval = qtyval - convert.ToInt32(txtqty.text);
cmd = new oledbcommand("update tablename set qty="+newval+" where pid=103");
}
}
于 2013-08-24T10:53:23.750 回答
0
cmd = new OleDbCommand("UPDATE [Seranne] SET [Quantity] ='" + newVal + "' WHERE [Code] IN (");

[这不可能是您的实际代码,因为它缺少右引号和括号。请始终复制并粘贴您的实际代码。]

WHERE [Code] IN (")

您正在尝试更新Code空字符串的位置?它更有可能是 NULL,所以这是它不会更新的原因之一。但是,你还没有执行这个 cmd,所以它不会改变任何东西。

[您真的打算更新所有没有 的记录Code吗?]

作为调试步骤的一部分,您还应该打印出 cmd 并尝试从 Access 中执行它。

最后,为什么要引用Quantity撇号?据推测,它是一个数字字段。

于 2013-08-24T17:21:15.513 回答