代码之家  ›  专栏  ›  技术社区  ›  TK.

c 35;(3.5)使用TableAdapters将空的DateTime值读/写到数据库

  •  2
  • TK.  · 技术社区  · 15 年前

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

    MSDN Datasets 明确声明:

    数据集中当前不支持可为空或可为空的结构。

    但是在MSDN网站上 TableAdapters 声明TableAdater可以支持可空类型:

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

    我很困惑!

    在数据集设计器中,我已将有问题的列的属性设置为“AllowDBNull=True”,但每当我运行返回空DateTime(SELECT*FROM UDF)的TableAdapter查询时,就会出现以下异常: ArguementOutOfRangeException:Year、Month和Day参数描述不可表示的日期时间

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

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

    如何修改TableAdapter和/或Dataset以允许对可以处理数据库中的空值的表运行查询?

    1 回复  |  直到 9 年前
        1
  •  0
  •   TK.    15 年前

    我找到的解决方案是使用to-CHAR()Oracle函数,并告诉表适配器需要一个字符串值

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

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