c#(3.5)使用TableAdapters读取/写入数据库的null DateTime值

时间:2010-11-18 09:21:16

标签: c# database nullable tableadapter

我使用VS2008 DataSet连接到数据库。数据库中的一个表包含一个允许空值的DateTime列(即Type:DateTime?)

MSDN Datasets明确声明:

  

DataSet目前不支持Nullable或Nullable结构。

但在TableAdapters的MSDN网站上,TableAdaters CAN支持Nullable类型:

  

TableAdapters支持可空类型Nullable(Of T)和T?。有关可空类型的更多信息...有关C#中可空类型的更多信息,请参阅使用可空类型(C#编程指南)。

我很困惑!

在DataSet Designer中我将违规列的属性设置为'AllowDBNull = True',但每当我运行返回null DateTime(SELECT * FROM UDF)的TableAdapter查询时,我都会遇到以下异常:“ArguementOutOfRangeException:年,月和日参数描述了无法表示的DateTime。“

我有一个想法是将Column的类型更改为System.Object以正确处理空值,然后我可以在我自己的代码中进行转换,但是,我仍然会得到相同的异常。

这个question建议在查询返回后如何处理空值,但是我无法让查询返回。

如何修改TableAdapter和/或数据集以允许我在Table上运行可以处理数据库中空值的查询?

1 个答案:

答案 0 :(得分:0)

我找到的解决方案是使用TO_CHAR()Oracle函数并告诉表适配器期望字符串值

SELECT to_char(NULL_DATE_FIELD,'dd/mm/yyyy HH24:MI:SS') FROM *

这意味着在使用代码中需要进行一些转换。虽然不太理想!