简体   繁体   English

由于 MySql 的语法不正确,无法更新我的数据库

[英]Updating my database won't work because of incorrect syntax for MySql

I am trying to update my database but then this error about my syntax shows up我正在尝试更新我的数据库,但随后出现了这个关于我的语法的错误

MySql.Data.MySqlClient.MySqlException: 'You have an error in your SQL syntax; MySql.Data.MySqlClient.MySqlException:'您的 SQL 语法有错误; check the manual that corresponds to your MySQL server version for the right syntax to use near '(platenumber,brand,model,yearmodel,regdate,exdate,odometer) set id = '1' values(' at line 1'查看与您的 MySQL 服务器版本相对应的手册,了解在“(车牌号、品牌、model、年份模型、regdate、exdate、里程表)附近使用的正确语法设置 id = '1' values(' at line 1'

I am not too familiar with MySQl but I got rid of all the errors it showed here in my code我对 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();
    }

what could be causing this error?什么可能导致此错误?

As stated in the error, your query is wrong如错误中所述,您的查询是错误的

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

mustn't have values part and should look like不能有values部分,应该看起来像

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

Don't ever use string join inside a query, but use parameters instead for two main reasons:永远不要在查询中使用字符串连接,而是使用参数,主要有两个原因:

  1. You don't go crazy combining strings你不要 go 疯狂组合字符串
  2. Your query won't suffer for SQL injection您的查询不会因 SQL 注入而受到影响

So even WHERE id= part must use a parameter!所以即使WHERE id=部分也必须使用参数!

You have problem in the query, the UPDATE statement should be in this format.您的查询有问题, UPDATE语句应该是这种格式。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM