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

98

我遇到了这个错误:

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

当我试图从 MySQL 数据库中获取数据时出现了这个错误。 我在我的 MySQL 数据库中使用了 date 类型。但是当我尝试将其检索到我的数据表中时,就出现了上述错误。

我该如何解决?


可能是重复的问题:无法将MySQL日期/时间值转换为System.DateTime - Gopi
11个回答

230

你必须在连接字符串中添加 Convert Zero Datetime=True,例如:

server=localhost;User Id=root;password=mautauaja;Persist Security Info=True;database=test;Convert Zero Datetime=True

4
谢谢!FYI:这需要写在MySQL连接字符串上,而不是SQL Server连接字符串上。 - user153923
节省了我的时间。像魔法一样运作。 - Naila Akbar
+1 - 太完美了!因为当列没有填充写入MySQL表时,我有零个日期时间。我更喜欢从现在开始将其更改为0970-01-01。非常感谢你。 - Drako

52
如果我在Google中搜索“无法将MySQL日期/时间值转换为System.DateTime”,我会看到很多与从Visual Studio访问MySQL的问题有关的参考资料。这是你的上下文吗?
其中一个建议的解决方案是:
这不是错误,而是预期行为。请查看连接选项下的手册,并将“允许零日期时间”设置为true,如附图所示,错误将消失。
参考:http://bugs.mysql.com/bug.php?id=26054

2
我建议不要在日期/时间列中使用“0000-00-00 00:00:00”作为您的数据。而是使用真实的日期值 - 如果您正在使用 .net。然而,MySQL 可以处理任何日期。您应该扫描所有的日期/时间值。 - Bimal Poudel

23

我添加了Convert Zero Datetime=TrueAllow Zero Datetime=True,现在它可以正常工作。


3
将datetime值作为字符串拉下来并执行DateTime.ParseExact(value, "ddd MMM dd hh:mm:ss yyyy", culture, styles);。您只需要设置从数据库返回的日期格式即可,最可能是yyyy-MM-dd HH:mm:ss。至少对我而言是这样的。
在此处查看有关DateTime.ParseExact的更多信息:链接

3

我也遇到了同样的问题,得到了列名和其类型。然后从表名中转换(col_Name as Char)。通过这种方式,我发现了问题是 '0000-00-00 00:00:00'。我将其更新为有效的日期和时间,我的问题得到了解决。


2

让MySql将Unix时间戳转换为字符串。使用mysql函数FROM_UNIXTIME( 113283901 )。


1
当您使用EF edmx与MySql时,请查看实体类型中的Precision属性。
<EntityType Name="table">
  <Key>
    <PropertyRef Name="Id" />
  </Key>
  <Property Name="Id" Type="int" StoreGeneratedPattern="Identity" Nullable="false" />
  <Property Name="date_field" Type="datetime" Precision="0" Nullable="false" />
</EntityType>

如果您在日期时间字段中进行了更改,则可能会导致该属性缺失。

1
不需要更改连接字符串,您可以使用MySqlDateTime对象的IsValidDateTime属性来帮助确定是否可以将对象转换为DateTime
我遇到了这样一种情况:我正在尝试从一个“UpdateTime”列加载数据,该列仅在行更新时显式设置(与始终设置的InsertedTime不同)。对于这种情况,我使用了MySqlDataReader.GetMySqlDateTime方法,如下所示:
using (MySqlDataReader reader = await MySqlHelper.ExecuteReaderAsync(...))
{
    if (await reader.ReadAsync())
    {
        DateTime? updateTime = reader.GetMySqlDateTime("UpdateTime").IsValidDateTime ? (DateTime?)reader["UpdateTime"] : null;
    }
}

1
在Stimulsoft报表中,将此参数添加到连接字符串中(右键单击数据源 -> 编辑)。
Convert Zero Datetime=True;

0
如果"allow zero datetime=true"不起作用,那么请使用以下解决方案:
在连接字符串中添加"allow zero datetime=no" - 这将使类型转换正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接