【问题标题】:Why I encountered error on MySQL 'UPDATE' command?为什么我在 MySQL 'UPDATE' 命令上遇到错误?
【发布时间】:2020-08-22 11:16:08
【问题描述】:

目前我的类图如下所示:

并且我想更新我的所有产品详细信息(prodName、prodDesc、prodCategory、prodDesc、制造商、供应商、stockLevel、reorderLevel、unitPrice),prodID 除外。

所以我使用了这个 SQL 查询:

UPDATE Product
    SET prodName = @prodName,
        prodCategory = @prodCategory,
        prodDesc = @prodDesc,
        manufacturer = @manufacturer,
        supplier = @supplier,
        stockLevel = @stockLevel,
        reorderLevel = @reorderLevel,
        unitPrice = @unitPrice
FROM product a, supply_item b, supply c
WHERE a.prodID = @prodID AND
      @prodID = b.prodID AND
      b.supplyID = c.supplyID;

但它无法工作,我的查询是否正确?

这是我的代码部分

protected void editSubmit_Click(object sender, EventArgs e)
    {
        MySqlConnection conn = new MySqlConnection(sqlConn);
        string sql = "UPDATE Product SET prodName = @prodName, prodCategory = @prodCategory, prodDesc = @prodDesc, manufacturer = @manufacturer, supplier = @supplier, stockLevel = @stockLevel, reorderLevel = @reorderLevel, unitPrice = @unitPrice FROM product a, supply_item b, supply c WHERE a.prodID = @prodID AND @prodID = b.prodID AND b.supplyID = c.supplyID;";
        MySqlCommand cmd = new MySqlCommand(sql, conn);
        conn.Open();
        cmd.Parameters.AddWithValue("@prodName", txtProductName.Text);
        cmd.Parameters.AddWithValue("@prodCategory", txtCategory.Text);
        cmd.Parameters.AddWithValue("@prodDesc", txtProductDesc.Text);
        cmd.Parameters.AddWithValue("@manufacturer", txtManufacturer.Text);
        cmd.Parameters.AddWithValue("@supplier", txtSupplier.Text);
        cmd.Parameters.AddWithValue("@stockLevel", txtStockLvl.Text);
        cmd.Parameters.AddWithValue("@reorderLevel", txtReorderLvl.Text);
        cmd.Parameters.AddWithValue("@unitPrice", txtPrice.Text);
        cmd.Parameters.AddWithValue("@prodID", txtProductID.Text); 
        cmd.ExecuteNonQuery();
        conn.Close();
    }

最初,我使用了这个查询,

"UPDATE Product SET prodName = @prodName, prodCategory = @prodCategory, prodDesc = @prodDesc, manufacturer = @manufacturer, supplier = @supplier, stockLevel = @stockLevel, reorderLevel = @reorderLevel, unitPrice = @unitPrice WHERE prodID = @prodID" 

但它没有显示任何错误,并且我无法更新我的产品上的任何值 知道如何更新我的产品吗? 谢谢??????

【问题讨论】:

  • MySQL 不支持FROMUPDATE 语句中。 FROM 子句中的逗号不建议在 any 数据库中使用。
  • 对于任何 SQL,请先尝试在 SQL 工具中直接运行,然后再在 C# 中尝试。
  • 哦,我明白了,那我应该用什么来代替FROM
  • 一种方法是将更新语句更改为选择,确认您正在获取所需的记录。确认后,将查询修改为更新语句(保留 were 子句)。 sqlservertutorial.net/sql-server-basics/sql-server-update-join
  • 考虑绑定值,而不是使用@variables。

标签: c# mysql asp.net sql-update mariadb


【解决方案1】:

MySQL 中的等价物似乎是:

UPDATE product p JOIN
       supply_item si 
       ON p.prodId = si.prodId JOIN 
       supply s
       ON s.supplyID = si.supplyID;
    SET p.prodName = @prodName,
        p.prodCategory = @prodCategory,
        p.prodDesc = @prodDesc,
        p.manufacturer = @manufacturer,
        p.supplier = @supplier,
        p.stockLevel = @stockLevel,
        p.reorderLevel = @reorderLevel,
        p.unitPrice = @unitPrice
WHERE p.prodID = @prodID;

注意事项:

  • 切勿FROM 子句中使用逗号。
  • 始终使用正确、明确、标准、可读的JOIN语法。
  • 使用有意义的表别名(例如表名的缩写),而不是任意字母。

【讨论】:

  • MySql.Data.MySqlClient.MySqlException: 'You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'a.prodId b.prodId JOINsupply sON s.supplyID = si.supplyID;SET p.prodName = 'H...' at line 1',但是却显示了这种错误。
  • 如果您使用 Gordon 发布的内容,则不会。你似乎已经抓取并执行了一些任意代码。
  • @SHAOHONGLI . . .我的代码中没有a.prodid,所以它不会产生那个错误。
  • 哦,是的,我的打字错误。感谢您的信息!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-15
  • 1970-01-01
  • 2014-10-13
  • 2020-08-03
相关资源
最近更新 更多