处理 DateTime DBNull
我在 SO 上看到过很多很多版本,但似乎没有一个能完全满足我的需求。
我的数据来自供应商数据库,该数据库允许日期时间字段为空。首先,我将数据放入数据表中。
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;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
使用
IsDBNull()< /code>
或者如果您有
SqlDataReader
并使您的
DateTime
属性可为空 (DateTime?
) 并设置null
如果是DBNull
。Field()
将自动执行此操作。Use
IsDBNull()
or if you have a
SqlDataReader
And make your
DateTime
properties to be nullable (DateTime?
) and setnull
in case ofDBNull
.Field<T>()
will automatically do this.一种可能的选择是将其存储为可为空的日期时间,语法为
DateTime?
这是一个 关于使用可空类型的 MSDN 链接
One possible option is store it as a nullable date time with the syntax
DateTime?
Here is a link to the MSDN about using nullable types
我发现处理此问题的最简单方法是使用“as”关键字将字段转换为您的数据类型。这对于可以为空的数据库字段非常有用,而且很好而且简单。
以下是有关此内容的更多详细信息:直接转换与“as”运算符?
示例:
I have found that the easiest way to handle this is to cast the field as your data type using the "as" keyword. This works great for database fields that can be null, and is nice and simple.
Here is more detail on this: Direct casting vs 'as' operator?
Example:
这是我用来读取日期时间的一些代码的示例,
我确信它可以写得更好,但对我来说运行良好
here is an example of some code i use to read Datetimes
im sure it could be written better but runs fine for me
您应该使用
DataRow["ColumnName"] is DBNull
来比较 DateTime null。例如:
You should use
DataRow["ColumnName"] is DBNull
to compare DateTime null.E.g.:
我编写了一个在所有项目中使用的通用扩展方法:
使用示例:
I wrote a generic extension method that I use in all of my projects:
Usage example: