0

可能重复:
处理 DBNull 的最佳方法是什么

.NET 中设置具有 DBNull 值的变量(也就是返回的 SQL 空值)的最有效语法是什么?我记得读过一些被放入 .NET 3.0 的东西。让我们假设我设置的变量具有 DateTime 类型。

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

4

2 回答 2

2

DateTime 是一个值类型,并且只能包含有效的日期/时间。通常,处理这种情况的方法是检查从数据库返回的值,看它是否为 DBNull.Value,如果是,请将 DateTime 设置为一个特殊值,如代表 Null 的 DateTime.MinValue。

或者,您可以使用 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");
于 2011-10-14T18:27:29.353 回答
2

我通常通过将我的类中的属性设置为 NULLABLE 类型来解决这个问题。这与 bool 类型特别相关,因为默认情况下,它没有值(既不是真也不是假)。

public class MyDbTable
    {
        public int MyId { get; set; }
        public DateTime? Date { get; set; }
        public bool? IsDirty { get; set; }
    }
于 2011-10-14T18:32:12.130 回答