首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理DateTime DBNull

处理DateTime DBNull
EN

Stack Overflow用户
提问于 2010-10-20 22:16:24
回答 6查看 44K关注 0票数 8

我在SO上看到了很多很多版本,但它们似乎都不能完全满足我的需求。

我的数据来自供应商数据库,该数据库允许DateTime字段为null。首先,我将我的数据放入DataTable中。

代码语言:javascript
复制
using (SqlCommand cmd = new SqlCommand(sb.ToString(), conn))
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
    da.Fill(dt);
}

我正在将DataTable转换为List<>进行处理。

代码语言:javascript
复制
var equipment = from i in dt.AsEnumerable()
    select new Equipment()
    {
        Id = i.Field<string>("ID"),
        BeginDate = i.Field<DateTime>("BeginDate"),
        EndDate = i.Field<DateTime>("EndDate"),
        EstimatedLife = i.Field<double>("EstimatedLife")
    }

那么,在这种情况下,如何检查DBNull呢?我试着写一个方法。

代码语言:javascript
复制
    public DateTime CheckDBNull(object dateTime)
    {
        if (dateTime == DBNull.Value)
            return DateTime.MinValue;
        else
            return (DateTime)dateTime;
    }
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-10-20 22:20:35

一种可能的选择是使用语法DateTime?将其存储为可以为空的日期时间

下面是一个关于使用可空类型的link to the MSDN

票数 8
EN

Stack Overflow用户

发布于 2010-10-20 22:19:59

使用IsDBNull()

代码语言:javascript
复制
System.Convert.IsDBNull(value);

或者如果你有一台SqlDataReader

代码语言:javascript
复制
reader.IsDBNull(ordinal);

并将DateTime属性设置为可空(DateTime?),如果是DBNull,则设置为nullField<T>()将自动执行此操作。

票数 10
EN

Stack Overflow用户

发布于 2017-11-07 23:51:45

我发现处理这个问题的最简单方法是使用" as“关键字将字段转换为您的数据类型。这对于可以为空的数据库字段非常有效,而且非常简单。

这里有更多关于这方面的细节:Direct casting vs 'as' operator?

示例:

代码语言:javascript
复制
    IDataRecord record = FromSomeSqlQuerySource;
    string nullableString;
    DateTime? nullableDateTime;

    nullableString = record["StringFromRecord"] as string;
    nullableDateTime = record["DateTimeFromRecord"] as DateTime?;
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3978815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档