Как установить для Sql DateTime значение null из LINQ

У меня есть два случая, когда мне нужно установить для поля DateTime в Sql значение null. Я использую классы C # и LINQ to SQL. Я прочитал много вопросов о stackoverflow, которые похожи на мой вопрос, но все же я кормлю свой немного другим.

Когда мы добавляем нового клиента.

Соответствующий код:

 Customer customer = new Customer();
 customer.CustomerName = txt_name.Text;
 customer.DOB = dtp_dob.Checked ? DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd")) : //send null here;

customer.DOB - это System.DateTime.

Я пробовал:

1)

 customer.DOB = dtp_dob.Checked ? DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd")) : SqlDateTime.Null;

Но это не удастся, поскольку SqlDateTime не может быть преобразован в System.DateTime.

2)

    DateTime? nullDateTime = new DateTime();
 customer.DOB = dtp_dob.Checked ? DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd")) : nullDateTime.Value
 

В этом случае сборка завершается успешно, но выдает исключение переполнения SqlDateTime.

Итак, как передать нулевое значение

Свойство члена DOB в LINQ Dataclass

введите описание изображения здесь

Многие из них предлагают установить для параметра Auto Generated Value значение true, а не вставлять какое-либо значение. Правда, во вставках работает.

Но теперь предположим, что уже существует запись о клиенте, в которой какое-то значение datetime установлено в поле DOB. Теперь пользователь хочет очистить это значение (удалить дату рождения), тогда в этом случае мне нужно передать нулевое значение с помощью UpdateOn, чтобы очистить дату и время, указанную в соответствующей строке клиента.

Заранее большое спасибо :)


person Marshal    schedule 16.04.2011    source источник
comment
Он допускает значение NULL, не могли бы вы просто установить его на null?   -  person Jeff Mercado    schedule 16.04.2011
comment
Customer.DOB должно быть DateTime?, а не DateTime, если столбец допускает значение NULL.   -  person Jon Skeet    schedule 16.04.2011


Ответы (2)


Вы должны уметь использовать:

Customer customer = new Customer();
customer.CustomerName = txt_name.Text;
customer.DOB = dtp_dob.Checked 
                  ? DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd")) 
                  : (DateTime?) null;

Обратите внимание на состав от null до DateTime?. Текущая проблема заключается в том, что компилятор не может определить тип условного выражения на основе операндов.

Проблема со второй попыткой заключается в том, что вы создаете новое значение DateTime, не допускающее значения NULL, то есть 1 января 0001 года нашей эры. Вы можете изменить это на:

DateTime? nullDateTime = null;
customer.DOB = dtp_dob.Checked 
                  ? DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd")) 
                  : nullDateTime;
person Jon Skeet    schedule 16.04.2011

пожалуйста, попробуйте

if(dtp_dob.Checked )
{
   customer.DOB = DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd"));
}
else
{
   cstomer.DOB =null;
}

поскольку DOB допускает значение NULL, этот код даст вам то, что вы хотите. Кстати, я не могу найти ничего вроде nullDateTime.Value

person Muhammad Adeel Zahid    schedule 16.04.2011