在.NET中处理DBNull的最有效方法

时间:2011-10-14 18:22:28

标签: .net sql dbnull

  

可能重复:
  What is the best way to deal with DBNull's

.NET中最有效的语法是设置一个值为DBNull的变量(又称返回SQL null值)?我记得读过这些东西放在.NET 3.0中的东西。让我们假设我设置的变量有一种DateTime。

常见错误:
从“DBNull”类型到“日期”类型的转换无效。

2 个答案:

答案 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; }
    }