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

时间:2011-04-22 11:12:02

标签: .net asp.net mysql asp.net-3.5

我收到此错误:

  

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

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

我该如何解决这个问题?

11 个答案:

答案 0 :(得分:181)

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

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

答案 1 :(得分:43)

如果我谷歌“无法将MySQL日期/时间值转换为System.DateTime”,我看到许多引用从Visual Studio访问MySQL的问题。这是你的背景吗?

建议的一个解决方案是:

  

这不是一个错误,而是预期的   行为。请查看手册   连接选项并设置“允许零”   日期时间“为真,如附加   图片,错误将消失。

参考:http://bugs.mysql.com/bug.php?id=26054

答案 2 :(得分:18)

我添加了Convert Zero Datetime=True& Allow Zero Datetime=True并且工作正常

答案 3 :(得分:3)

将日期时间值作为字符串向下拉并执行DateTime.ParseExact(value, "ddd MMM dd hh:mm:ss yyyy", culture, styles);您只需要为从数据库返回的日期设置日期格式。最有可能的是yyyy-MM-dd HH:mm:ss。至少对我而言。

点击此处DateTime.ParseExact

了解更多信息

答案 4 :(得分:2)

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

答案 5 :(得分:1)

我也面临同样的问题,并获取列名称及其类型。然后从表名转换(col_Name作为Char)。从这个方面我得到的问题是'0000-00-00 00:00:00'然后我更新为有效的日期和时间错误离开我的情况。

答案 6 :(得分:1)

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

  1. 转到项目
  2. 项目属性
  3. 选择“应用程序”选项卡
  4. 查看应用程序事件
  5. 这将打开一个新文件。此文件包含在应用程序开始时使用的代码。

    将此代码写入该新文件中:

     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
    

答案 7 :(得分:0)

您可以使用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;
    }
}

答案 8 :(得分:0)

如果“允许零日期时间= true” 不起作用,请使用以下解决方法:-

将此添加到您的连接字符串中:“允许零datetime = no” -使类型转换能够完美工作。

答案 9 :(得分:0)

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

Convert Zero Datetime=True;

答案 10 :(得分:0)

当您将 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>

如果您在日期时间字段中进行了更改,则可能缺少该属性中的此属性。