如何将 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”附近使用正确的语法。

我唯一能想到的是数据库没有将时间识别为时间戳,非常感谢任何帮助。

【问题讨论】:

dtprintidPerson 列的类型是什么?而且您应该始终使用参数化查询。这种字符串连接对 SQL 注入攻击是开放的。如果您的dtprinttimestamp,则应将其添加为DateTime,而不是string dtprint 是 timestamp 类型,idPerson 是 int 类型 在日期字符串周围加上单引号。 '" + dt + "' 您是否有权将 UPDATE 命令转换为存储过程..?如果是这样的话..我也建议转换 UPDATE 语句以利用参数化查询并将 _cmd.ExecuteNonQuery(); 包装在 trycatch(SqlException sqlExshow the sqlEx.Message here 以便您可以捕获 SQLException跨度> 【参考方案1】:

由于dtstring 而您的dtprinttimestamp,因此您在尝试插入时需要使用单引号。喜欢;

"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 时间戳表列的主要内容,如果未能解决你的问题,请参考以下文章

使用 C# 为 MySQL 转换 DateTime

如何从 MySql 数据库中获取日期到 C# DateTime 对象?

无法将 MySQL 日期/时间值转换为 System.DateTime

琐事:如何将 JSON2.org DateTime 字符串转换为 C# DateTime

C#如何将DateTime的12小时格式转换为24小时时间格式????

如何在 C# 中将字符串转换为 DateTime?