我正在使用ibatis和C#。我从具有CreatedDate作为字段之一的选择查询中获得结果。 Mysql中CreatedDate的数据类型是Date。我将选择查询的结果集分配给Ilist< DeliveryClass取代。
这里的DeliveryClass CreatedDate为DateTime。当我运行应用程序时,我得到无法将MySQL日期/时间值转换为System.DateTime 。可能是什么问题?
答案 0 :(得分:73)
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()
。
那已经解决了
答案 1 :(得分:9)
添加"转换零日期时间=真"连接字符串解决了我的问题。
<connectionStrings> <add name="MyContext" connectionString="Datasource=localhost;Database=MyAppDb;Uid=root;Pwd=root;CHARSET=utf8;convert zero datetime=True" providerName="MySql.Data.MySqlClient" /> </connectionStrings>
此致 PS
答案 2 :(得分:6)
格式问题,实际上mysql对于日期/时间数据类型有不同的格式(yyyy-mm-dd)并解决这个问题从这里使用.net的mysql连接器库 http://dev.mysql.com/downloads/connector/net/ 它将为名为MysqlDateTime的日期/时间提供其他数据类型
或者您可以使用DATE_FORMAT格式化sql语句中的日期/时间数据(日期,格式) 你可以从这里获得更多细节 http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format
但我不推荐这个,因为你会失去日期/时间数据类型的力量(例如你无法比较),因为现在你将它转换为字符串,但我认为它将在报告中有用< / p>
答案 3 :(得分:5)
我通过将列的默认值设置为null
数据而不是使用0000-00-00 00:00:00
来解决了我的问题:
update table set date = null
答案 4 :(得分:2)
它可能超出DateTime对象的范围。我见过几次。尝试更改sql以返回当前日期而不是列,并查看是否通过确定。
答案 5 :(得分:0)
这对我有用:
SELECT
IF(tb.Date1 = '0000-00-00 00:00:00', NULL, tb.Date1) AS ValidDate
FROM MyTable AS tb
答案 6 :(得分:0)
您需要使用为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"/>
答案 7 :(得分:0)
有一件事也在改变你的读者行动。 当我写
时,我遇到了这个问题string myvar = reader.GetString(0);
然后我曾经写过这个
object myvar = reader.GetValue(0);
不再有错误。
答案 8 :(得分:0)
当我将表中的日期列设置为0而不是null时,这个问题发生了。我的代码中有一个错误。
查看表,我可以看到该字段的日期设置为000-00-00-一旦我将违规字段重置为空,问题就消失了。