【问题标题】:Unable to convert MySQL date/time value to System.DateTime无法将 MySQL 日期/时间值转换为 System.DateTime
【发布时间】:2011-02-25 11:08:32
【问题描述】:

我正在使用 ibatis 和 C#。我从具有 CreatedDate 作为字段之一的选择查询中得到结果。 Mysql 中 CreatedDate 的数据类型是 Date。我将选择查询的结果集分配给 Ilist

这里 DeliveryClass CreatedDate 为 DateTime。当我运行应用程序时,我得到无法将 MySQL 日期/时间值转换为 System.DateTime。可能是什么问题?

【问题讨论】:

    标签: c# mysql datetime date ibatis


    【解决方案1】:

    当我的表中的日期列设置为 0 而不是 null 时,我发生了这个问题 - 我的代码中有一个错误。

    查看表格,我可以看到该字段已设置为 000-00-00 的日期 - 一旦我将有问题的字段重置为 null,问题就消失了。

    【讨论】:

      【解决方案2】:

      您需要对为 MySql 数据库添加的连接字符串进行简单的更改。 CONVERT ZERO DATETIME = TRUE

      <add name="NAMEOFYOURCONNECTIONSTRING" connectionString="server's HOSTNAMEorIP(i.e Localhost or IP address);user id=USER_ID(i.e User ID for login Database);Pwd=PASSWORD(i.e User Password for login Database);persistsecurityinfo=True;database=NAMEOFDATABASE;Convert Zero Datetime=True" providerName="MySql.Data.MySqlClient"/>
      

      【讨论】:

      • 请详细说明。
      • @DarpanSanghavi 希望您现在可以轻松理解。
      【解决方案3】:

      同样有效的一件事是改变你的读者行为。 我写的时候遇到了这个问题

      string myvar = reader.GetString(0);
      

      然后我就写了这个

      object myvar = reader.GetValue(0);
      

      没有更多的错误。

      【讨论】:

        【解决方案4】:

        我通过将列的默认值设置为null 数据而不是使用0000-00-00 00:00:00 解决了我的问题:

        update table set date = null
        

        【讨论】:

          【解决方案5】:

          这对我有用:

          SELECT 
              IF(tb.Date1 = '0000-00-00 00:00:00', NULL, tb.Date1) AS ValidDate
          FROM MyTable AS tb
          

          【讨论】:

            【解决方案6】:

            在连接字符串中添加“convert zero datetime=True”解决了我的问题。

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

            问候 附言

            【讨论】:

              【解决方案7】:
              MySqlConnection connect = new MySqlConnection("server=localhost; database=luttop; user=root; password=1234; pooling = false; convert zero datetime=True");
              

              convert zero datetime=True 添加到连接字符串会自动将0000-00-00 日期值转换为DateTime.MinValue()

              解决了

              【讨论】:

              • 这是比选择更好的解决方案。
              • 在更新 appSettings.json 文件中的连接字符串后,这对我来说效果很好。谢谢@Klors。
              【解决方案8】:

              它可能在 DateTime 对象的范围之外。我已经看过几次了。尝试更改 sql 以返回当前日期而不是您的列,看看它是否正常。

              【讨论】:

                【解决方案9】:

                格式中的问题,实际上 mysql 对日期/时间数据类型有不同的格式 (yyyy-mm-dd),为了解决这个问题,请使用 .net 的 mysql 连接器库从这里 http://dev.mysql.com/downloads/connector/net/ 它将为称为 MysqlDateTime 的日期/时间提供其他数据类型

                或者您可以使用 DATE_FORMAT(date,format) 在 sql 语句中格式化日期/时间数据 你可以从这里获得更多细节 http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format

                但我不建议这样做,因为您将失去日期/时间数据类型的功能(例如,您无法比较),因为现在您将其转换为字符串,但我认为它在报告中会很有用

                【讨论】:

                • 将连接器更新到最新版本并没有解决我的问题
                • 连接器本身无法解决您的问题,这取决于您如何检索数据?例如,我使用了我的生成 doodads 模板我覆盖了日期时间的检索属性(从数据表中读取值 => 将其从 mysqldatetime 转换为 .net 日期时间)你如何检索数据?
                • 日期没有格式,它们是二进制值。只有在解析包含日期文字的文本时,格式才会发挥作用。哪个不应该被使用,因为它们会引入转换错误和 SQL 注入的可能性
                猜你喜欢
                • 2011-06-05
                • 2013-01-21
                • 2013-06-04
                • 1970-01-01
                • 2013-05-17
                • 2011-07-05
                相关资源
                最近更新 更多