【发布时间】: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_id或live_support_queues的名称中是否可能有尾随空格?