从 C# 到 MySQL 的 DateTime:不完整的存储

Posted

技术标签:

【中文标题】从 C# 到 MySQL 的 DateTime:不完整的存储【英文标题】:DateTime from C# to MySQL: incomplete storage 【发布时间】:2011-08-11 01:02:37 【问题描述】:

我正在使用DateTime 对象来创建监控应用程序。 其原理是每次用户启动特定应用程序时,当前日期和时间都会保存在数据库中。然后在监控应用程序中,我从数据库中获取这个日期字段并显示它。

今天进行测试时,我尝试启动应用程序:DateTime.Now 已存储(即,在法国文化中,22/04/11 17:09:50)。 当我启动监控应用程序时,我从数据库中得到的是 22/04/11 00:00:00 没有保存确切时间有什么原因吗?

DB 中的列当然是 Date 列。

一些代码:

保存日期:

                command = new mysqlCommand(_updateDateCommand, connection);
                command.Parameters.AddWithValue("?Template", app);
                command.Parameters.AddWithValue("?Date", DateTime.Now);
                command.Parameters.AddWithValue("?Id", u.Id);


                if (command.ExecuteNonQuery() != 0) return true;

检索数据:

                object date = reader.GetValue(4);
                if (date == System.DBNull.Value)
                
                    tempUserApp.DateLastUsed = DateTime.MinValue;
                
                else
                
                    tempUserApp.DateLastUsed = (DateTime)date;
                

我确定问题出在存储过程中,因为使用 Toad 等工具可视化数据会在日期字段中显示 22/04/11 00:00:00

更新命令:

private readonly string _updateDateCommand =
            "UPDATE userapplications " +
            "JOIN template t ON t.Name = ?Template " +
            "SET DateUsed=?Date  WHERE `User Id`=?Id AND `Template Id`=t.Id";

MySQL 日期有什么特殊格式吗?

我碰到this *** question 并尝试了提出的解决方案,它也不起作用

有什么想法吗?

【问题讨论】:

你能显示 _updateCommand 的内容吗? 【参考方案1】:

检查数据库中的数据类型,在我看来你的字段是日期类型, 所以

【讨论】:

【参考方案2】:

数据库列应该是日期时间,而不是日期。看看Docs。

关于日期:

当您需要时使用 DATE 类型 只有日期值,没有时间 部分。 MySQL 检索并显示 'YYYY-MM-DD' 格式的 DATE 值。 支持的范围是“1000-01-01”到 '9999-12-31'。

关于日期时间:

当您使用 DATETIME 类型时 需要同时包含日期和 时间信息。 MySQL 检索和 显示 DATETIME 值 'YYYY-MM-DD HH:MM:SS' 格式。这 支持的范围是 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'。

像 dd/mm/yyyy 00:00:00 这样获取日期返回具有误导性,它只是被工具格式化为默认日期/日期时间格式。您真正需要的是将 DB 列设置为 DateTime。

【讨论】:

以上是关于从 C# 到 MySQL 的 DateTime:不完整的存储的主要内容,如果未能解决你的问题,请参考以下文章

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

将日期时间从 C# 插入到 SqlSrv

MySQL DateTime 的 C# 输入字符串格式不正确

如何在 MySQL 服务器中使用 DATETIME 存储 GMT 偏移量

C# 关于DateTime类型 精确到毫秒

C#时间DateTime包含星期存入数据库错误