我在SO上看到了很多很多版本,但它们似乎都不能完全满足我的需求。
我的数据来自供应商数据库,该数据库允许DateTime字段为null。首先,我将我的数据放入DataTable中。
using (SqlCommand cmd = new SqlCommand(sb.ToString(), conn))
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
da.Fill(dt);
}我正在将DataTable转换为List<>进行处理。
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呢?我试着写一个方法。
public DateTime CheckDBNull(object dateTime)
{
if (dateTime == DBNull.Value)
return DateTime.MinValue;
else
return (DateTime)dateTime;
}发布于 2010-10-20 22:20:35
一种可能的选择是使用语法DateTime?将其存储为可以为空的日期时间
下面是一个关于使用可空类型的link to the MSDN
发布于 2010-10-20 22:19:59
System.Convert.IsDBNull(value);或者如果你有一台SqlDataReader
reader.IsDBNull(ordinal);并将DateTime属性设置为可空(DateTime?),如果是DBNull,则设置为null。Field<T>()将自动执行此操作。
发布于 2017-11-07 23:51:45
我发现处理这个问题的最简单方法是使用" as“关键字将字段转换为您的数据类型。这对于可以为空的数据库字段非常有效,而且非常简单。
这里有更多关于这方面的细节:Direct casting vs 'as' operator?
示例:
IDataRecord record = FromSomeSqlQuerySource;
string nullableString;
DateTime? nullableDateTime;
nullableString = record["StringFromRecord"] as string;
nullableDateTime = record["DateTimeFromRecord"] as DateTime?;https://stackoverflow.com/questions/3978815
复制相似问题