2013-08-27 73 views
0

我得到了问题。我想将数据更新到数据库,但数据库不会更新。更新到数据库不起作用

下面是代码:

更新下面的代码:

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,当我在程序中设置Quantity10并更新它时,数据库应该更新Quantity90(因为100-10),但它仍然在100

我可以在某处错误吗?

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

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

在截图1,我已经设置的数量10和在MessageBox表明数据已成功更新,数据库中的数据应该是90(因为100-10)。但是,在数据库所在的屏幕截图2中,Quantity仍然在100

在此先感谢!

+0

大约20分钟前我编辑了你的帖子。由于您在不刷新屏幕的情况下对帖子进行了修改,因此您的大部分修改都会丢失(如我为您添加的屏幕截图)。 – gunr2171

+0

@ gunr2171:我很抱歉。您能否重新发布您在我的问题中编辑的截图?谢谢。 –

回答

0

您有一个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

+0

我认为OP想要更新所有'CODE'为空或NULL的行。他用'IN('')'来实现这一点,但正如你所说,它不是一个有效的SQL。你应该把这个想法变成代码。 –

+0

@KingKing - 语句读取IN('not'IN('')'...所以我相信查询是不正确的.OP需要澄清更多的IMO。 –

+0

也许他错了,你是对的,这是一个双引号,而不是2个单引号。如果是这样,正确的查询就是'IN('')'。 –