Mik*_*lls 8 c# datetime dbnull
我已经在SO上看过很多很多这样的版本,但是它们似乎都不能满足我的需求.
我的数据来自供应商数据库,该数据库允许DateTime字段为null.首先,我将数据拉入DataTable.
using (SqlCommand cmd = new SqlCommand(sb.ToString(), conn))
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
da.Fill(dt);
}
Run Code Online (Sandbox Code Playgroud)
我正在将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")
}
Run Code Online (Sandbox Code Playgroud)
那么,在这个实例中如何检查DBNull?我试着写一个方法.
public DateTime CheckDBNull(object dateTime)
{
if (dateTime == DBNull.Value)
return DateTime.MinValue;
else
return (DateTime)dateTime;
}
Run Code Online (Sandbox Code Playgroud)
使用 IsDBNull()
System.Convert.IsDBNull(value);
Run Code Online (Sandbox Code Playgroud)
或者如果你有 SqlDataReader
reader.IsDBNull(ordinal);
Run Code Online (Sandbox Code Playgroud)
并使您的DateTime属性可以为空(DateTime?)并设置null为DBNull.Field<T>()会自动执行此操作.
我发现处理这个问题的最简单方法是使用“as”关键字将字段转换为您的数据类型。这对于可以为 null 的数据库字段非常有用,并且非常简单。
这里有更多细节:直接转换 vs 'as' 运算符?
例子:
IDataRecord record = FromSomeSqlQuerySource;
string nullableString;
DateTime? nullableDateTime;
nullableString = record["StringFromRecord"] as string;
nullableDateTime = record["DateTimeFromRecord"] as DateTime?;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35784 次 |
| 最近记录: |