可以分配Nothing和/或DBNull的自定义结构?

时间:2010-09-23 06:55:42

标签: .net structure nullable dbnull nothing

如果有可能对可以分配Nothing和/或DbNull.Values的自定义结构进行decalre,并且也可以将其设置为Nothing,那么任何人都可以告诉我吗?

我要做的是停止一个自定义的DateTime对象,该对象可以从数据库查询中接收DBNull.Value,并且也可以作为Nothing启动。这有可能吗?

提前致谢。

祝你好运, 杜安

2 个答案:

答案 0 :(得分:2)

好像Nullable<DateTime>(简称DateTime?或VB.NET中的Date?)让你几乎一直在那里。您只需要专门处理自己的DBNull转换。

// You can set a DateTime? to null.
DateTime? d = null;

// You can also set it to a DateTime.
d = DateTime.Now;

// You can check whether it's null in one of two ways:
if (d == null || !d.HasValue) // (These mean the same thing.)
{ }

// Boxing a DateTime? will either result in null or a DateTime value.
SetDatabaseValue(d);

// As for conversions from DBNull, you'll have to deal with that yourself:
object value = GetDatabaseValue();
d = value is DBNull ? null : (DateTime?)value;

答案 1 :(得分:0)

如果您正在使用DataSet,请使用Field和SetField DataRow extension methods。这些允许您使用Nullable类型而不必再担心DBNull。

,例如,假设“MyDateField”字段(DateTime类型)可以为空。然后你可以做这样的事情:

foreach (var row in myDataTable)
{
    // will return null if the field is DbNull
    var currentValue = row.Field<DateTime?>("MyDateField");

    // will set the value to DbNull.Value
    row.SetField<DateTime?>("MyDateField", null);
}