【问题标题】:MySQL server error - You have an error in your SQL syntaxMySQL 服务器错误 - 您的 SQL 语法有错误
【发布时间】:2019-01-21 04:47:27
【问题描述】:

我正在尝试更新数据库表并收到错误

"MySql.Data.MySqlClient.MySqlException: '你的 SQL 有错误 句法;检查与您的 MySQL 服务器版本相对应的手册 在 'group='superadmin' WHERE 附近使用正确的语法 identifier='steam:steam:1100001098b5888'' 在第 1 行'"

        // Creates query to run
public void UpdateInfo(String jobTitle, int jobGrade, String adminLevel, String identifier) {

    // Opens the database connection if it's not already open
    if (!(databaseConnected)) {
        openConnection();
    }

    // Creates query to run
    String query = "UPDATE " + table + " SET job=@jobTitle, job_grade=@jobGrade, group=@adminLevel WHERE identifier=@identifier";

    // Makes a new command
    MySqlCommand cmd = new MySqlCommand(query, connection);

    // Replaces the @ placeholders with actual variables
    cmd.Parameters.AddWithValue("@jobTitle", jobTitle);
    cmd.Parameters.AddWithValue("@jobGrade", jobGrade);
    cmd.Parameters.AddWithValue("@adminLevel", adminLevel);
    cmd.Parameters.AddWithValue("@identifier", identifier);

    // Executes it and if it's...
    if (cmd.ExecuteNonQuery() > 0) {
        // Successful
        MessageBox.Show("Successfully updated information");

        closeConnection();
        return;
    } else {
        // Not successful
        MessageBox.Show("Error with updating information!");

        // Closes the connection again to prevent leaks
        closeConnection();
        return;
    }

}

【问题讨论】:

  • 请向我们展示您正在更新的表的架构(列类型)。
  • 它们都是字符串,除了 job_grade 是一个 int。不是这样,我可以很好地获取信息,但不知何故我的更新出了点问题。

标签: c# mysql


【解决方案1】:

我在https://sqltest.net/ 上尝试了您的查询,并注意到当我尝试创建表时它突出显示了“组”。我想知道问题是否可能是使用“组”作为列名,因为它是一个保留字。

是否可以尝试将列重命名为 group_level 或在“组”或“组”周围添加反引号并查看是否有效?

例如

'group'=@grouplevel

我发现this threadthis thread on renaming the column 存在将“组”作为列名的问题。添加反引号似乎可以解决这两个问题。

编辑:根据 OP,双引号 (") 解决了问题,而不是单引号。编辑后的答案包括在内。

【讨论】:

    【解决方案2】:

    尝试像这样更改查询

    String query = "UPDATE " + table + " SET job='@jobTitle', job_grade=@jobGrade, group='@adminLevel' WHERE identifier='@identifier'";
    

    如果你在查询中输入字符串值,你需要使用'this'来工作

    我希望这对你有用。

    如果没有,您可以像这样使用 String.Format。

    String Query = String.Format("Update `{0}` Set job='{1}', job_grade={2}, group='{3}' Where identifier='{4}'", table, jobTitle, jobGrade, adminLevel, identifier);
    

    【讨论】:

    • 你不觉得,这个占位符在没有' 的情况下也有效吗?你试过了吗?
    • 请不要使用这些解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    相关资源
    最近更新 更多