无法将 MySQL 日期/时间值转换为 System.DateTime
Posted
技术标签:
【中文标题】无法将 MySQL 日期/时间值转换为 System.DateTime【英文标题】:Unable to convert MySQL date/time value to System.DateTime 【发布时间】:2011-02-25 11:08:32 【问题描述】:我正在使用 ibatis 和 C#。我从具有 CreatedDate 作为字段之一的选择查询中得到结果。 mysql 中 CreatedDate 的数据类型是 Date。我将选择查询的结果集分配给 Ilist
这里 DeliveryClass CreatedDate 为 DateTime。当我运行应用程序时,我得到。可能是什么问题?
【问题讨论】:
【参考方案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 注入的可能性以上是关于无法将 MySQL 日期/时间值转换为 System.DateTime的主要内容,如果未能解决你的问题,请参考以下文章
无法将 MySQL 日期/时间值转换为 System.DateTime
如何在 MySQL 中使用 Case When 和 Str_to Date 将 Varchar 日期值转换为日期数据类型