2014-12-01 209 views
-2

我正在阅读MySql数据库,其中一列是DateTime类型。其中一些日期为空。我似乎无法弄清楚如何检查值是否为空。 我认为IsDBNull以便可以解决这个问题,但它使所有IsDBNull抛出异常

if (!reader.IsDBNull(4)) 
{ 
    service.ServiceDate = reader.GetDateTime("serviceDate"); 
} 

这是我得到的异常没有什么区别:

“的其他信息:无法转换MySQL的日期/时间值 System.DateTime的”

我也试过

if (System.DBNull.Value == reader.IsDBNull(4)) 

以及

reader.IsDBNull(4).ToString() 

Convert.ToBoolean(reader.IsDBNull(4)) 

我如何检查它不使用尝试捕捉?

+0

什么是读卡器的类型? – faester 2014-12-01 22:33:51

+0

您正在阅读的日期时间值是什么?它可能超出System.DateTime的范围。 – Blorgbeard 2014-12-01 22:34:16

+0

'IsDBNull'不会抛出该错误。但'reader.GetDateTime(“serviceDate”)'应该会导致编译器错误,因为'GetDateTime'只接受一个'int'作为列的索引参数。显示你的真实代码。 – 2014-12-01 22:34:47

回答

3

该错误似乎与IsDBNull没有任何关系 - 它特别提到了DateTime转换。您是否尝试将列索引传递到GetDateTime,就像您使用IsDbNull一样?

if (!reader.IsDBNull(4)) 
{ 
    service.ServiceDate = reader.GetDateTime(4); 
} 

另一种可能性:Convert Zero Datetime=true

此外,阅读上的错误等一些信息后,这听起来像你可能需要添加Convert Zero Datetime=true到您的连接字符串,使0000-00-00 00:00:00值的转换在DATETIME列(如果您有任何这些)到DateTime.MinValue

看看这里的一些结果:http://www.bing.com/search?q=Unable+to+convert+MySQL+date%2Ftime+value+to+System.DateTime&form=IE10TR&src=IE10TR&pc=HPDTDFJS

+0

谢谢! AllowZeroDateTime设置解决了它! – haosmark 2014-12-02 14:21:08