插入 DateTime(从 C# 到 MySQL)
Posted
技术标签:
【中文标题】插入 DateTime(从 C# 到 MySQL)【英文标题】:Insert into DateTime (from C# to MySQL) 【发布时间】:2014-12-03 20:39:54 【问题描述】:我一直有这个错误: 您的 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”是日期时间列)
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");
也用“/”代替“-” 这里有什么帮助吗?
【问题讨论】:
在继续之前,请使用参数化查询:***.com/questions/652978/… 【参考方案1】:您使用的方法并不是编写 SQL 命令的最佳方法。您应该在查询中使用 sql 参数。您的代码容易受到 SQL Injected 的攻击,显然这不是最好的方法。
尝试使用类似的东西:
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;
【讨论】:
我不认为SqlCommands
为MySql
工作。至少在我的经验中没有。【参考方案2】:
问题不在于日期时间字符串的格式;问题出在 INSERT 语句的 SQL 文本中,就在附加值之前。为了调试这个,你可以输出查询字符串并检查它。
问题出在此处的 SQL 文本中:
+ "', '1,'" +
该文字和下一列值之间需要有一个逗号。看起来您只是错过了一个单引号:
+ "', '1','" +
^
一个潜在的更大问题是您的代码似乎容易受到 SQL 注入的影响。考虑一下当您包含在 SQL 文本中的变量之一包含单引号,或者更多 nefarios ala Little Bobby Tables 时会发生什么。 http://xkcd.com/327/.
如果您希望列值是当前日期和时间,则无需运行单独的查询来获取该值。您可以在查询文本中简单地引用函数NOW()
。例如
+ "', '1', NOW() )";
【讨论】:
【参考方案3】:你执行了两次
//cmd.ExecuteNonQuery();
DateTime e = (DateTime)cmd.ExecuteScalar();
应该只有一次。
然后像@sgeddes said in the comments 使用参数化查询,它们避免了错误和sql 注入。
【讨论】:
以上是关于插入 DateTime(从 C# 到 MySQL)的主要内容,如果未能解决你的问题,请参考以下文章
如何从 MySql 数据库中获取日期到 C# DateTime 对象?
从 C# 到 MySQL 的 DateTime:不完整的存储
如何使用 Node.js 从 Angular 将日期插入 MySQL DATETIME 列?