2013-08-27 70 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('')'。 –