【问题标题】:C# MySQL Syntax error in SQL StatementSQL 语句中的 C# MySQL 语法错误
【发布时间】:2017-09-22 23:08:36
【问题描述】:

我有这个简单的方法,应该将一行插入数据库。它正在引发异常。

private void AddToLiveQueue(int user_id, bool release = false)
    {
        string sql = "INSERT INTO live_support_queues (user_id, release, created_at, updated_at)";
        sql += " VALUES(?user_id, ?release, ?created_at, ?created_at)";

        MySqlConnection conn = new MySqlConnection(connString);
        MySqlCommand cmd = conn.CreateCommand();
        cmd.CommandText = sql;

        cmd.Parameters.AddWithValue("?user_id", user_id);
        cmd.Parameters.AddWithValue("?release", release);
        cmd.Parameters.AddWithValue("?created_at", DateTime.UtcNow);


        try
        {
            conn.Open();
            cmd.ExecuteNonQuery();
            conn.Close();
        }
        catch (Exception ex)
        {
            SendEmail email = new SendEmail();
            email.Send(ex.Message + "      " + ex.ToString());
        }
    }

我收到此错误:

"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'release, created_at, updated_at) VALUES(70, 0, '2017-09-22 23:00:16.686741', '20' at line 1"

非常感谢任何帮助。谢谢!

【问题讨论】:

  • 如果你调试这个,取出值并在数据库上运行语句,会发生什么?
  • id 是自动生成的,不在插入语句中。 user_is 不是自动生成的,而是在插入语句中。
  • 可以打印生成的SQL并贴出来吗?这通常是一个很好的调试检查。
  • 我无法打印生成的 SQL 语句,因为我正在使用参数。看这里:stackoverflow.com/questions/16971267/… 但是user_id = 70,release是0
  • 我可能记错了,但我似乎记得 AddWithValue() 没有很好地处理布尔参数。也就是说,您的错误似乎表明 MySQL 在它达到之前就存在问题; user_idlive_support_queues 的名称中是否可能有尾随空格?

标签: c# mysql


【解决方案1】:

release 是保留字,如果用作标识符,需要用`符号转义。

https://dev.mysql.com/doc/refman/5.7/en/keywords.html

【讨论】:

  • 谢谢!我很感激。
  • 以后当查询不运行时,尝试提取准确的查询并运行它进行测试...它将帮助您快速解决此类问题
  • 我发现最好的做法是用 ` ; 分隔所有标识符。这样,如果添加了新的保留字(或可能导致歧义的关键字),您已经被覆盖了。
猜你喜欢
  • 1970-01-01
  • 2015-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多