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


85

我收到此错误:

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

当我尝试从MySQL数据库中获取数据时。我的MySQL数据库中有日期数据类型。但是,当将其检索到我的数据表中时,它得到了上面的错误。

我怎样才能解决这个问题?


Answers:


51

如果我在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

212

您必须添加Convert Zero Datetime=True到您的连接字符串,例如:

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

3
谢谢!仅供参考:这是在MySQL连接字符串上,而不是SQL Server连接字符串上。
jp2code 2014年

节省了我的时间。像魅力一样运作
空指针

+1-完美!我有零个日期时间,因为当列未填满时,在表MySQL上写零日期时间。我喜欢它,从现在开始改变0970-01-01.Thanks你这么多
Drako

21

我同时添加了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



2

我也面临同样的问题,并获取列名及其类型。然后从表名强制转换(col_Name为Char)。通过这种方式,我得到的问题是“ 0000-00-00 00:00:00”,然后我将有效日期和时间更新为我的情况下错误消失了。


1

您可以使应用程序与MySql使用的日期和时间完全兼容。当应用程序在运行时运行时,请提供以下代码。首先转到应用程序事件。在工具列表中

  1. 转到项目
  2. 项目属性
  3. 选择应用程序选项卡
  4. 查看应用程序事件

这将打开一个新文件。该文件包含在应用程序启动时使用的代码。

将此代码写入该新文件:

 Partial Friend Class MyApplication

    Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup
        My.Application.ChangeCulture("en")
        My.Application.ChangeUICulture("en")
        My.Application.Culture.DateTimeFormat.ShortDatePattern = "yyyy-MM-dd"
        My.Application.Culture.DateTimeFormat.LongDatePattern = "yyyy-MM-dd"
        My.Application.Culture.DateTimeFormat.LongTimePattern = "HH:mm:ss"
        My.Application.Culture.DateTimeFormat.ShortTimePattern = "HH:mm:ss"
    End Sub


End Class

1

您可以使用对象的IsValidDateTime属性MySqlDateTime来帮助您确定是否可以将对象转换为,而不是更改连接字符串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;
    }
}

0

如果“允许零datetime = true”不起作用,则使用以下解决方案:-

将此添加到您的连接字符串: “ allow zero datetime = no” -使类型转换完美工作。


0

在Stimulsoft报告中,将此参数添加到连接字符串中(右键单击数据源->编辑)

Convert Zero Datetime=True;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.