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

Posted

技术标签:

【中文标题】无法将 MySQL 日期/时间值转换为 System.DateTime【英文标题】:Unable to convert MySQL date/time value to System.DateTime 【发布时间】:2011-02-25 11:08:32 【问题描述】:

我正在使用 ibatis 和 C#。我从具有 CreatedDate 作为字段之一的选择查询中得到结果。 mysql 中 CreatedDate 的数据类型是 Date。我将选择查询的结果集分配给 Ilist

这里 DeliveryClass CreatedDate 为 DateTime。当我运行应用程序时,我得到。可能是什么问题?

【问题讨论】:

【参考方案1】:

当我的表中的日期列设置为 0 而不是 null 时,我发生了这个问题 - 我的代码中有一个错误。

查看表格,我可以看到该字段已设置为 000-00-00 的日期 - 一旦我将有问题的字段重置为 null,问题就消失了。

【讨论】:

【参考方案2】:

您需要对为 MySql 数据库添加的连接字符串进行简单的更改。 CONVERT ZERO DATETIME = TRUE

<add name="NAMEOFYOURCONNECTIONSTRING" connectionString="server's HOSTNAMEorIP(i.e Localhost or IP address);user id=USER_ID(i.e User ID for login Database);Pwd=PASSWORD(i.e User Password for login Database);persistsecurityinfo=True;database=NAMEOFDATABASE;Convert Zero Datetime=True" providerName="MySql.Data.MySqlClient"/>

【讨论】:

请详细说明。 @DarpanSanghavi 希望您现在可以轻松理解。【参考方案3】:

同样有效的一件事是改变你的读者行为。 我写的时候遇到了这个问题

string myvar = reader.GetString(0);

然后我就写了这个

object myvar = reader.GetValue(0);

没有更多的错误。

【讨论】:

【参考方案4】:

我通过将列的默认值设置为null 数据而不是使用0000-00-00 00:00:00 解决了我的问题:

update table set date = null

【讨论】:

【参考方案5】:

这对我有用:

SELECT 
    IF(tb.Date1 = '0000-00-00 00:00:00', NULL, tb.Date1) AS ValidDate
FROM MyTable AS tb

【讨论】:

【参考方案6】:

在连接字符串中添加“convert zero datetime=True”解决了我的问题。

<connectionStrings>   <add name="MyContext" connectionString="Datasource=localhost;Database=MyAppDb;Uid=root;Pwd=root;CHARSET=utf8;convert zero datetime=True" providerName="MySql.Data.MySqlClient" /> </connectionStrings>

问候 附言

【讨论】:

【参考方案7】:
MySqlConnection connect = new MySqlConnection("server=localhost; database=luttop; user=root; password=1234; pooling = false; convert zero datetime=True");

convert zero datetime=True 添加到连接字符串会自动将0000-00-00 日期值转换为DateTime.MinValue()

解决了

【讨论】:

这是比选择更好的解决方案。 在更新 appSettings.json 文件中的连接字符串后,这对我来说效果很好。谢谢@Klors。【参考方案8】:

它可能在 DateTime 对象的范围之外。我已经看过几次了。尝试更改 sql 以返回当前日期而不是您的列,看看它是否正常。

【讨论】:

【参考方案9】:

格式中的问题,实际上 mysql 对日期/时间数据类型有不同的格式 (yyyy-mm-dd),为了解决这个问题,请使用 .net 的 mysql 连接器库从这里 http://dev.mysql.com/downloads/connector/net/ 它将为称为 MysqlDateTime 的日期/时间提供其他数据类型

或者您可以使用 DATE_FORMAT(date,format) 在 sql 语句中格式化日期/时间数据 你可以从这里获得更多细节 http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format

但我不建议这样做,因为您将失去日期/时间数据类型的功能(例如,您无法比较),因为现在您将其转换为字符串,但我认为它在报告中会很有用

【讨论】:

将连接器更新到最新版本并没有解决我的问题 连接器本身无法解决您的问题,这取决于您如何检索数据?例如,我使用了我的生成 doodads 模板我覆盖了日期时间的检索属性(从数据表中读取值 => 将其从 mysqldatetime 转换为 .net 日期时间)你如何检索数据? 日期没有格式,它们是二进制值。只有在解析包含日期文字的文本时,格式才会发挥作用。哪个不应该被使用,因为它们会引入转换错误和 SQL 注入的可能性

以上是关于无法将 MySQL 日期/时间值转换为 System.DateTime的主要内容,如果未能解决你的问题,请参考以下文章

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

将日期字符串转换为 mysql 日期时间字段

将mysql日期转换为日期时间选择器

如何在 MySQL 中使用 Case When 和 Str_to Date 将 Varchar 日期值转换为日期数据类型

无法将 PHP 值转换为日期类型。预期以下类型之一:null,DateTime [关闭]

无法在 MySQL 查询中将字符串转换为日期时间