Как установить Sql DateTime в NULL из LINQ - PullRequest
5 голосов
/ 16 апреля 2011

У меня есть два случая, когда мне нужно было бы установить поле DateTime в Sql на ноль.Я использую C # и LINQ to SQL Classes.Я прочитал много вопросов о 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.

Итак, как передать nullvalue

Свойство члена DOB в классе данных LINQ

enter image description here

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

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

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

Ответы [ 2 ]

15 голосов
/ 16 апреля 2011

Вы должны быть в состоянии использовать:

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, т. Е. 1 января 0001 года нашей эры. Вы можете изменить это на:

DateTime? nullDateTime = null;
customer.DOB = dtp_dob.Checked 
                  ? DateTime.Parse(dtp_dob.Value.ToString("yyyy-MM-dd")) 
                  : nullDateTime;
0 голосов
/ 16 апреля 2011

plz try

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

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

...