使用Access 2010在update语句中出现语法错误

时间:2014-05-28 20:40:26

标签: c# sql

我一直收到错误,我的update语句中存在语法错误。关于如何解决这个问题的任何想法?我在另一个程序中使用了一个非常相似的代码,它工作正常,所以我很难过。我试过了''并且没有在SQL语句中没有结果的差异。

using (OleDbConnection con = new OleDbConnection(constring))
{
   try
   {
      string cmdstring = "UPDATE EMPLOYEE SET Location = '@location', Position = '@position' WHERE TellerNum = '@teller'";
      using (OleDbCommand cmd = new OleDbCommand(cmdstring, con))
      {
         cmd.Parameters.AddWithValue("@location", comboBox18.Text);
         cmd.Parameters.AddWithValue("@position", comboBox19.Text);
         cmd.Parameters.AddWithValue("@teller", comboBox17.Text);
         con.Open();
         cmd.ExecuteNonQuery();
         con.Close();
      }
      string inststring = "INSERT INTO EMPLOYEE (Comments) VALUES (@comments) WHERE TellerNum = @teller";
      using (OleDbCommand insert = new OleDbCommand(inststring, con))
      {
         insert.Parameters.AddWithValue("@comments", textBox8.Text);
         insert.Parameters.AddWithValue("@teller", comboBox17.Text);
         con.Open();
         insert.ExecuteNonQuery();
         con.Close();
      }
      MessageBox.Show("Submitted Successfully");
   }
   catch (Exception ex)
   {
      MessageBox.Show("Failed due to " + ex.Message);
   }
}

1 个答案:

答案 0 :(得分:0)

正如在注释中所解释的那样,语法错误是由INSERT INTO语句中存在WHERE子句引起的,但是如果要使用注释,位置和位置更新现有员工记录,则只需使用一个命令即可。另请注意,您不要将参数占位符放在单引号之间。如果这样做,则会在隐藏参数值

的文字值中转换占位符
using (OleDbConnection con = new OleDbConnection(constring))
{
   try
   {
      string cmdstring = @"UPDATE EMPLOYEE 
                           SET Location = @location, 
                           Comments = @Comments,
                           [Position] = @position 
                           WHERE TellerNum = @teller";
      using (OleDbCommand cmd = new OleDbCommand(cmdstring, con))
      {
         cmd.Parameters.AddWithValue("@location", comboBox18.Text);
         cmd.Parameters.AddWithValue("@comments", textBox8.Text);
         cmd.Parameters.AddWithValue("@position", comboBox19.Text);
         cmd.Parameters.AddWithValue("@teller", comboBox17.Text);
         con.Open();
         cmd.ExecuteNonQuery();
      }
   }
   catch (Exception ex)
   {
      MessageBox.Show("Failed due to " + ex.Message);
   }
}

如果你想在之前的评论中添加新评论,那么你的查询应该是(总是一个更新查询),就像这样

string cmdstring = @"UPDATE EMPLOYEE 
                     SET Location = @location, 
                     Comments = Comments + @Comments,
                     [Position] = @position 
                     WHERE TellerNum = @teller";

使用保留关键字也会产生问题。众所周知,使用保留关键字会导致语法错误。在您的情况下,POSITION是reserved keyword in MS-Access,因此,您需要将其括在方形行李箱中。 (但最好将该名称更改为不同的名称以避免将来重复相同的错误)