如何将 C# DateTime 转换为 MySQL 时间戳表列
Posted
技术标签:
【中文标题】如何将 C# DateTime 转换为 MySQL 时间戳表列【英文标题】:How to convert C# DateTime to MySQL timestamp table column 【发布时间】:2014-12-25 14:05:41 【问题描述】:我正在尝试使用当前时间(原始值为 NULL)更新名为 dtprint 的时间戳类型的表元素。我使用的代码如下:
mysqlConnection con = new MySqlConnection("Connection_String");
con.Open();
MySqlCommand _cmd = con.CreateCommand();
string dt = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
_cmd.CommandText = "UPDATE requests SET dtprint = " + dt + " WHERE idPerson = " + _personID[index];
_cmd.ExecuteNonQuery();
con.Close();
我不断收到的异常是:附加信息:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“14:03:23 WHERE idPerson = 45”附近使用正确的语法。
我唯一能想到的是数据库没有将时间识别为时间戳,非常感谢任何帮助。
【问题讨论】:
dtprint
和 idPerson
列的类型是什么?而且您应该始终使用参数化查询。这种字符串连接对 SQL 注入攻击是开放的。如果您的dtprint
是timestamp
,则应将其添加为DateTime
,而不是string
。
dtprint 是 timestamp 类型,idPerson 是 int 类型
在日期字符串周围加上单引号。 '" + dt + "'
您是否有权将 UPDATE 命令转换为存储过程..?如果是这样的话..我也建议转换 UPDATE 语句以利用参数化查询并将 _cmd.ExecuteNonQuery();
包装在 trycatch(SqlException sqlExshow the sqlEx.Message here 以便您可以捕获 SQLException跨度>
【参考方案1】:
由于dt
是string
而您的dtprint
是timestamp
,因此您在尝试插入时需要使用单引号。喜欢;
"UPDATE requests SET dtprint = '" + dt + "' WHERE
但不要这样用。
您应该始终使用parameterized queries。这种字符串连接对SQL Injection 攻击开放。
也可以使用using
statement 来处理您的数据库连接和对象。
using(MySqlConnection con = new MySqlConnection(ConnectionString))
using(MySqlCommand _cmd = con.CreateCommand())
string dt = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
_cmd.CommandText = @"UPDATE requests SET dtprint = @dtprint
WHERE idPerson = @id";
_cmd.Parameters.Add("@dtprint", MySqlType.TimeStamp).Value = dt;
_cmd.Parameters.Add("@id", MySqlType.Int).Value = _personID[index];
con.Open();
_cmd.ExecuteNonQuery();
【讨论】:
以上是关于如何将 C# DateTime 转换为 MySQL 时间戳表列的主要内容,如果未能解决你的问题,请参考以下文章
如何从 MySql 数据库中获取日期到 C# DateTime 对象?
无法将 MySQL 日期/时间值转换为 System.DateTime
琐事:如何将 JSON2.org DateTime 字符串转换为 C# DateTime