我有一个类名为myDateTime
的字段,类型为 nullable DateTime
,这些是访问方法:
System.DateTime? _MyDateTime;
public System.DateTime? MyDateTime {get; set;}
我的代码中的其他地方我需要使用MyDateTime
内的数据写入myColumn
属性值。
MyDateTime = Convert.ToDateTime(myReader["myColumn"]);
myColumn
的值可以是NULL
或DateTime
。如果myColumn
为NULL,则此代码会产生错误,因为我无法转换NULL值。此外,我不能写:
MyDateTime = System.DBNull.Value;
因此,如果该字段中存在NULL
值,我不知道如何处理此问题。
我会避免使用一个简单的对象来存储数据,我会保留一种属性输入。
答案 0 :(得分:2)
您需要将DBNull.Value
转换为空值DateTime?
。在DbDataReader
上为此编写扩展方法可能最简单:
public static DateTime? GetNullableDateTime(this DbDataReader reader,
string column)
{
object value = reader[column];
return value == DBNull.Value ? (DateTime?) null : (DateTime) value;
}
然后将其用作:
MyDateTime = myReader.GetNullableDateTime("myColumn");
请注意,我使用的是演员而不是Convert.ToDateTime
- 如果你真的想要自动从字符串转换为DateTime
值等,你可以使用后者,但我更喜欢多一点关于那种事情的明确。 (这是模式可能不合适的标志......)
答案 1 :(得分:0)
你可以使用Tryparse ......
System.DateTime? _MyDateTime;
public System.DateTime? MyDateTime {get; set;}
if (DateTime.TryParse(myReader["myColumn"], out MyDateTime ))
{
//do stuffs if value is parsed successfully
}
else
{
}