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

    头一次通过查全英资料解决项目中的问题,写个博客算是个里程碑吧。

                                                                                ----前言


【情景再现】

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

         项目--Unable to convert MySQL date/time value to System.DateTime_第1张图片

       鉴于之前了解过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)将数据库中该字段设置默认值:

        项目--Unable to convert MySQL date/time value to System.DateTime_第2张图片

     代码如下:

update table set date = null  //更新数据表,使得TimeSpan字段默认为null
        原理:在表中插入数据时,如果没有对TimeSpan字段传值,则数据库自动为其填充"null"值,这样程序在读取数据库中数据时候就不会因为不认识"0000-00-00"这种类型而报错。

       分析:这种方法可以避免这个错误,但是对我来说TimeSpan存在的意义就丧失了,最好还是能够使得TimeSpan获得到值。


      (3)在格式上,其实使用mysqlconnection链接在传递日期/时间时有不同的格式(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日期格式所引发的错误。


       总结:问题虽小,通过查外文资料解决问题却是我编程事业上的一大步。

                

 

                                                                                                                                                                           

 

 

 

      



你可能感兴趣的:(项目--Unable to convert MySQL date/time value to System.DateTime)