当前位置:  开发笔记 > 编程语言 > 正文

表是可以为空的DateTime,但DataSet会抛出异常吗?

如何解决《表是可以为空的DateTime,但DataSet会抛出异常吗?》经验,为你挑选了1个好方法。

我正在尝试使用DataSet设计器从查询中创建数据表.我把它弄得很好.使用的查询从数据库返回可为空的datetime列.但是,当它涉及到这段代码时:

DataSet1.DataTable1DataTable table = adapter.GetData();

这会抛出一个StrongTypingException:

[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
public System.DateTime event_start_date {
    get {
        try {
            return ((global::System.DateTime)(this[this.tableDataTable1.event_start_dateColumn]));
        }
        catch (global::System.InvalidCastException e) {
            throw new global::System.Data.StrongTypingException("The value for column \'event_start_date\' in table \'DataTable1\' is DBNull.", e);
        }
    }
    set {
        this[this.tableDataTable1.event_start_dateColumn] = value;
    }
}

如何使用设计器允许此列为Nullable?



1> Robert Rossn..:

类型化数据集不支持可空类型.它们支持可空.

类型化数据集生成器创建非可空属性以及用于处理空值的相关方法.如果创建一个MyDate类型DateTimeAllowDbNull设置为的列true,则DataRow子类将实现一个DateTime名为non-null的属性MyDate,一个SetMyDateNull()方法和一个IsMyDateNull()方法.这意味着如果要在代码中使用可空类型,则必须执行以下操作:

DateTime? myDateTime = myRow.IsMyDateNull() ? null : (DateTime?) row.MyDate;

虽然这并没有完全打败使用类型化数据集的目的,但它真的很糟糕.令人沮丧的是,类型化数据集以一种比System.Data扩展方法更不可用的方式实现可空列.

特别糟糕,因为类型化数据集在某些地方确实使用了可空类型 - 例如,AddRow()包含上述可为空的DateTime列的表的方法将采用DateTime?参数.

很久以前,我在MSDN论坛上询问了这个问题,最终ADO项目经理解释说可空类型与类型化数据集同时实现,他的团队没有时间通过​​.NET完全集成这两个类型. 2.0的发货日期.据我所知,从那时起,他们还没有为打字数据集添加新功能.


自Visual Studio 2008以来,已经弃用了Typed DataSet以支持Entity Framework,所以当他们专注于EF时,不要指望微软会花费时间和精力在这项技术上.如果Typed Datasets缺乏对可空类型的支持对您来说是一个大问题,我强烈建议将您的项目迁移到EF.
这是不正确的@Hoppe,DataSet Designer将根据属性的名称为您生成此方法.
推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有