Пользовательская структура, которой можно присвоить Nothing и / или DBNull? - PullRequest
0 голосов
/ 23 сентября 2010

Пожалуйста, кто-нибудь может мне посоветовать, если возможно удалить специальную структуру, которой можно присвоить Nothing и / или DbNull.Values, а также можно присвоить значение Nothing?

Что я хочу сделатьэто создание пользовательского объекта DateTime, который может получить DBNull.Value из запроса к базе данных, а также начать жизнь как Nothing.Возможно ли это?

Заранее спасибо.

С уважением, Дуэйн

Ответы [ 2 ]

2 голосов
/ 23 сентября 2010

Похоже, Nullable<DateTime> (для краткости DateTime? или Date? в VB.NET) вы получите почти .Вам просто нужно самостоятельно разобраться с конвертацией в / из 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;
0 голосов
/ 23 сентября 2010

Если вы работаете с DataSets, используйте методы расширения FieldField DataRow . Это позволяет вам использовать типы Nullable, не беспокоясь о DBNull.

Например, предположим, что поле "MyDateField" (типа DateTime) имеет значение NULL. Тогда вы можете сделать что-то вроде этого:

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);
}
...