插入DateTime(从C#到MySQL)
本文关键字:MySQL DateTime 插入 | 更新日期: 2023-09-27 18:25:57
我一直有这个错误:您的SQL语法有错误;查看与MySQL服务器版本对应的手册,了解在第1行"2014-10-08 19:39:57)"附近使用的正确语法
public string ObtenerFechaHora()
{
string query = "select CURRENT_TIMESTAMP() as Fecha";
OpenConnection();
MySqlCommand cmd = new MySqlCommand(query, connection);
cmd.ExecuteNonQuery();
DateTime e = (DateTime)cmd.ExecuteScalar();
CloseConnection();
return e.ToString("yyyy-MM-dd H:mm:ss");
}
然后我插入("Fecha"是DateTime列)
string query = "INSERT INTO actividad (idTerminal, Proceso, Nombre, Tiempo, Fecha) VALUES('" + idTerminal + "', '" + Proceso + "', '" + Nombre + "', '1,'" + this.ObtenerFechaHora() + ")";
我已经使用了格式的战利品,我一直有错误,例如:
e.ToString("yyyy-MM-dd H:mm:ss");
e.ToString("yyyy-MM-dd HH:mm:ss");
e.ToString("dd-MM-yyyy H:mm:ss");
e.ToString("yyyy-dd-MMH:mm:ss");
也用"/"代替"-"这里有人帮忙吗?
问题不在于日期时间字符串的格式;问题出现在INSERT语句的SQL文本中,就在附加值之前。为了调试它,您可以输出查询字符串并对其进行检查
问题出现在这里的SQL文本中:
+ "', '1,'" +
该文字和下一列值之间需要有一个逗号。看起来你只是错过了一句话:
+ "', '1','" +
^
一个潜在的更大的问题是,您的代码似乎容易受到SQL注入的攻击。考虑一下,当您在SQL文本中包含的一个变量包含一个引号,或者像Little Bobby Tables这样更邪恶的东西时会发生什么。http://xkcd.com/327/.
如果希望列值为当前日期和时间,则不需要运行单独的查询来获取值。您可以简单地在查询文本中引用函数NOW()
。例如
+ "', '1', NOW() )";
您执行了两次
//cmd.ExecuteNonQuery();
DateTime e = (DateTime)cmd.ExecuteScalar();
应该只有一次。
然后,就像@sgeddes在评论中所说的那样,使用参数化查询,可以避免错误和sql注入。
您使用的方法不是编写SQL命令的最佳方法。您应该在查询中使用sql参数。您的代码容易受到SQL注入的攻击,显然这不是最好的方法。
试着使用这样的东西:
string commandText = "UPDATE Sales.Store SET Demographics = @demographics "
+ "WHERE CustomerID = @ID;";
SqlCommand command = new SqlCommand(commandText, connection);
command.Parameters.Add("@ID", SqlDbType.Int);
command.Parameters["@ID"].Value = customerID;