数据库更新没有';不起作用

本文关键字:不起作用 更新 数据库 | 更新日期: 2023-09-27 18:29:07

我遇到了问题。我想将数据更新到数据库,但数据库不会更新。

这是代码:

更新以下代码:

else if (firstForm.textBox1.Text == "Seranne")
            {
                string query = "SELECT [Quantity], [Description], [Price] FROM [Seranne] WHERE [Code] IN (";
                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);
                OleDbDataReader dReader;
                dReader = cmd.ExecuteReader();
                while (dReader.Read())
                {
                    if (textBoxCodeContainer[index].TextLength != 0)
                    {
                        this.textBoxQuantityContainer[index].Maximum = Convert.ToDecimal(dReader["Quantity"].ToString());
                        this.textBoxDescContainer[index].Text = dReader["Description"].ToString();
                        this.textBoxSubTotalContainer[index].Text = dReader["Price"].ToString();
                    }
                    if (textBoxQuantityContainer[index].Value != 0 && textBoxQuantityContainer[index].Value >= Convert.ToDecimal(dReader["Quantity"].ToString()))
                    {
                        newVal = textBoxQuantityContainer[index].Value - Convert.ToDecimal(dReader["Quantity"].ToString());
                        cmd = new OleDbCommand("UPDATE [Seranne] SET [Quantity] ='" + newVal + "' WHERE [Code] IN ('");
                    }
                    index += 1;
                }
                conn.Close();
                dReader.Close();
            }
        }
        private void UpdateQuantity()
        {
            System.Media.SoundPlayer sound = new System.Media.SoundPlayer(@"C:'Windows'Media'Windows Notify.wav");
            sound.Play();
            MessageBox.Show("Updated Successfully", "Success");
        }
        private void button1_Click(object sender, EventArgs e)
        {
            UpdateQuantity();
        }

以上代码都有效,除了将Quantity更新到数据库之外。我的意思是,我将数据库中的Quantity设置为100,当我在程序中将Quantity设置为10并更新它时,数据库应该将Quantity更新为90(因为100-10),但它仍然处于100

我会错在哪里吗?

以下是屏幕截图的链接:(屏幕截图1)https://www.dropbox.com/s/rph5iuh371rc9ny/Untitled.png

(屏幕截图2)https://www.dropbox.com/s/5q8pyztqy7ejupy/Capture.PNG

在屏幕截图1中,我已经将数量设置为10,消息框显示数据已成功更新,数据库中的数据应为90(因为100-10)。但是,在数据库所在的屏幕截图2中,Quantity仍处于100

提前感谢!

数据库更新没有';不起作用

您有一个OleDbCommand,但您没有对数据库执行查询。

您需要打开代码中没有包含的OleDbConnection(如果它存在的话)。它应该看起来像:

connection.Open();

其中connectionOleDbConnection对象。

此外,您的查询看起来不完整。

 UPDATE [Seranne] SET [Quantity] ='" + newVal + "' WHERE [Code] IN ("

无效的SQL

UPDATE语句应该类似于:

UPDATE [Table] SET Quantity = newVal WHERE Code IN (Val1, Val2, Val3)

您还需要将其更改为使用SQL paramerterized queries来阻止SQL Injection