【问题标题】:Updating my database won't work because of incorrect syntax for MySql由于 MySql 的语法不正确,无法更新我的数据库
【发布时间】:2021-07-18 06:45:03
【问题描述】:

我正在尝试更新我的数据库,但是出现了这个关于我的语法的错误

MySql.Data.MySqlClient.MySqlException: '你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 '(platenumber,brand,model,yearmodel,regdate,exdate,odometer) set id = '1' values(' at line 1' 附近使用正确的语法

我对 MySQl 不太熟悉,但我摆脱了它在我的代码中显示的所有错误

 private void savebtn_Click(object sender, EventArgs e)
    {
        string ID = idtxt.Text;

        MySqlCommand cmd = new MySqlCommand("update inventory.vehicle(platenumber,brand,model,yearmodel,regdate,exdate,odometer) set id = '" + this.idtxt.Text + "' values(@platenumber, @brand, @model,@yearmodel, @regdate, @exdate,@odometer) where id = '"+ this.idtxt.Text +"'", conn);

        cmd.Parameters.Add("@platenumber", MySqlDbType.VarChar, 10).Value = pnumber.Text;
        cmd.Parameters.Add("@brand", MySqlDbType.VarChar, 60).Value = brand.Text;
        cmd.Parameters.Add("@model", MySqlDbType.VarChar, 45).Value = model.Text;
        cmd.Parameters.Add("@yearmodel", MySqlDbType.Int32).Value = yearmodel.Text;
        cmd.Parameters.Add("@regdate", MySqlDbType.Date).Value = datereg.MinDate;
        cmd.Parameters.Add("@exdate", MySqlDbType.Date).Value = regexp.MinDate;
        cmd.Parameters.Add("@odometer", MySqlDbType.Decimal).Value = odometer.Text;



        int i = cmd.ExecuteNonQuery();
        if (i != 0)
        {
            MessageBox.Show("Success");
        }
        else
        {   
            MessageBox.Show("Fail");
        }

        this.Close();
    }

什么可能导致这个错误?

【问题讨论】:

  • 您是要更新现有记录还是插入新记录?
  • where id = '"+ this.idtxt.Text +"' 但是... 为什么?您已经在使用其他所有参数,为什么不这样做呢?
  • 强制性小鲍比桌阅读:xkcd.com/327
  • 我正在尝试更新记录@BrianRogers
  • 哦,所以我应该离开where id = '"+ this.idtxt.Text +"'并删除其他参数?

标签: c# mysql .net-2.0


【解决方案1】:

如错误中所述,您的查询错误

MySqlCommand cmd = new MySqlCommand(
  "update inventory.vehicle 
  (platenumber,brand,model,yearmodel,regdate,exdate,odometer) 
  set id = '" + this.idtxt.Text + "' 
  values(@platenumber, @brand, @model,@yearmodel, @regdate, @exdate,@odometer)
  where id = '"+ this.idtxt.Text +"'", conn);

不能有 values 部分,应该看起来像

UPDATE inventory.vehicle SET 
  platenumber=@platenumber,
  brand=@brand
  model=@model,
  ....
WHERE id = @id

永远不要在查询中使用字符串连接,而是使用参数,主要有两个原因:

  1. 组合字符串不会发疯的
  2. 您的查询不会受到 SQL 注入的影响

所以即使WHERE id= 部分也必须使用参数!

【讨论】:

    【解决方案2】:

    您的查询有问题,UPDATE 语句应该是这种格式。

    UPDATE table_name
    SET column1 = value1, column2 = value2, ...
    WHERE condition;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-08
      相关资源
      最近更新 更多