您的位置:首页 > 产品设计 > UI/UE

项目--Unable to convert MySQL date/time value to System.DateTime

2016-04-23 19:27 585 查看
   
头一次通过查全英资料解决项目中的问题,写个博客算是个里程碑吧。
                                                                                ----前言

【情景再现】

        最近项目过程中遇到了许多bugs,如图,就是其中一个:
         


       鉴于之前了解过mysql是"The
world's most popular open source database",会有非常多的开源代码和资料可以查询,So,点了些英文的论坛进去瞧了瞧。
 

【问题缘由】

       经过查资料,这是因为在数据表中日期列中有"0000-00-00"数据值,不出所料,在插入数据的时候,TimeSpan字段没有自动更新,"0000-00-00"就在那里,So,这个时候基本可以自己独立解决掉这个问题了。

【解决办法】

     (1)要修正这个问题,可以把这些数据设为null,或者在连接字符串中设置"AllowZero Datetime=True"
       As shown in this picture:
      


   
代码如下:

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


   
 原理:在程序端web.config中说明允许Zero Datetime这种格式传入到代码,这样子VS就把这个"0000-00-00"当做一种时间日期格式来处理。

      (2)将数据库中该字段设置默认值:
        


     代码如下:

update table set date = null  //更新数据表,使得TimeSpan字段默认为null
       原理:在表中插入数据时,如果没有对TimeSpan字段传值,则数据库自动为其填充"null"值,这样程序在读取数据库中数据时候就不会因为不认识"0000-00-00"这种类型而报错。
       分析:这种方法可以避免这个错误,但是对我来说TimeSpan存在的意义就丧失了,最好还是能够使得TimeSpan获得到值。

      (3)在格式上,其实使用mysql的connection链接在传递日期/时间时有不同的格式(yyyy-mm-dd),可以上这个网站上去参考:http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html (mysql一个官方性性质的外文网站)

       我的办法:在mysql数据表插入数据时直接为TimeSpan传递一个当前时间,这样既能让TimeSpan字段起作用,又能够避免"Unable to convert MySQL date/time value to System.DateTime"这个因为mysql日期格式所引发的错误。

       总结:问题虽小,通过查外文资料解决问题却是我编程事业上的一大步。
                
 
                                                                                                                                                             
             
 
 
 
      
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: