.NET中最有效的语法是设置一个值为DBNull的变量(又称返回SQL null值)?我记得读过这些东西放在.NET 3.0中的东西。让我们假设我设置的变量有一种DateTime。
常见错误:
从“DBNull”类型到“日期”类型的转换无效。
答案 0 :(得分:2)
DateTime是一种值类型,只能包含有效的日期/时间。通常,处理它的方法是检查从数据库返回的值以查看它是否为DBNull.Value,如果是,则将DateTime设置为特殊值,如DateTime.MinValue,表示Null。
或者您可以使用DateTime?这是一个可以为空的DateTime数据类型,您实际上可以将其赋值为null(常规.Net null,而不是DBNull)。
DateTime foo;
if (row["SomeField"] == DBNull.Value) {
foo = DateTime.MinValue;
} else {
foo = (DateTime)row["SomeField"];
}
您可以通过在DataRow上创建扩展方法来使这种语法更好一点,如下所示:
public static void ToDateTime(this DataRow row, string columnName) {
if (row[columnName] == DBNull.Value) {
return DateTime.MinValue;
} else {
return (DateTime)row[columnName];
}
}
然后你可以像这样重写原始代码:
DateTime foo = row.ToDateTime("SomeField");
答案 1 :(得分:2)
我通常通过使我的类中的属性成为NULLABLE类型来解决这个问题。这与bool类型特别相关,因为默认情况下,它没有值(既不是真也不是假)。
public class MyDbTable
{
public int MyId { get; set; }
public DateTime? Date { get; set; }
public bool? IsDirty { get; set; }
}