2013-08-28 55 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(); 
     } 

编辑:(在下面的函数UpdateQuantity是当用户点击更新按钮),我得到一个错误,当我点击更新按钮,这里是错误:Syntax error (missing operator) in query expression '[Code] IN ('.

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

      string query = "SELECT [Quantity], [Description], [Price] FROM [Seranne] WHERE [Code] IN ("; 

      OleDbConnection conn = new OleDbConnection(connectionString); 

      OleDbDataReader dReader; 

      OleDbCommand cmd = new OleDbCommand(query, conn); 

      conn.Open(); 

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

      dReader = cmd.ExecuteReader(); 

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

       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 + ")"; 

       newVal = textBoxQuantityContainer[index].Value - Convert.ToDecimal(dReader["Quantity"].ToString()); 
       cmd.ExecuteNonQuery(); 
       System.Media.SoundPlayer sound = new System.Media.SoundPlayer(@"C:\Windows\Media\Windows Notify.wav"); 
       sound.Play(); 
       MessageBox.Show("Updated Successfully", "Success"); 
      } 

      index += 1; 

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

     private void button1_Click(object sender, EventArgs e) 
     { 
      UpdateQuantity(); 
     } 

上面代码中的所有工作,节选用于更新数量到数据库。我的意思是,我将数据库中的数量设置为100,当我在我的程序中将Quantity设置为10并更新数据库时,数据库应该将数量更新为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中,数量仍然为100.

在此先感谢!

+0

您正在使用哪个数据库?访问? SQL Server? MySql(我看到这是你的标签之一)? –

+2

您正在构建更新命令,但没有执行它... – muratgu

+0

@ muratgu:但在datareader.read之前的顶部,我已经声明并执行命令 –

回答

0

您更新查询

cmd = new OleDbCommand("UPDATE [Seranne] SET [Quantity] ='" + newVal + "' WHERE [Code] IN ('"); 

没有出现在已发布的代码来完成的。我的猜测是,你正在得到一个语法错误,你的代码没有陷入和显示。

+0

你是什么意思,似乎没有完成我已发布的代码?语法错误意味着跟踪? –

+0

Your line ends in'Where [Code] IN(',但我没有看到你在哪里完成'WHERE'子句 – 2013-08-28 02:21:09

+0

在这里:“query = query +”)“;”我完成了“WHERE “条款 –