Evr*_*Evr 2 c# sql datetime dbnull
我有一个可以为空的DateTime字段"BirthDate",现有代码以这种方式处理这个问题
info.BirthDate = (DateTime?)reader["Birthdate"];
Run Code Online (Sandbox Code Playgroud)
这会导致"无效转换"错误,并且会中断.好吧,我理解这是因为nulls的返回方式与sql不同,并且类型为"DBNull"
结果证明是这样的
if (reader["Birthdate"] != DBNull.Value)
{
info.Birthdate = (DateTime)reader["Birthdate"];
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么这个有效吗?..我特别迷失在DBNull的.Value部分.如果IS返回作为的DBNull如何代码连这个块内到达?
DBNull是一个单身人士.它只有一个例子.您可以使用访问此实例DBNull.Value.比较检查是否DBNull(.Value)返回以及是否返回(!=)然后它知道它可以安全地将其转换为DateTime.
来自MSDN:
DBNull是一个单例类,这意味着只能存在此类的此实例.
或者你可以使用这个Convert.IsDBNull方法:
if (!Convert.IsDBNull(reader["Birthdate"]))
{
info.Birthdate = (DateTime)reader["Birthdate"];
}
Run Code Online (Sandbox Code Playgroud)