2013-12-20 5 views
0

В веб-приложении, над которым я работаю, веб-приложение должно принимать значения DateTime, так как клиенты могут не знать информацию о своей дате рождения. Конечно, это непростая задача, потому что в C# DateTime не имеет значения NULL.DateTime принимает значение null

DateTime rawBirthDate = Convert.ToDateTime(txtDOB.Text); 
fxTxn.BirthDate = rawBirthDate; 

с этим, я должен был изменить свой код, чтобы принять нулевое значение:

DateTime? rawBirthDate = string.IsNullOrEmpty(txtBirthDate) ? (DateTime?)null : DateTime.Parse(txtBirthDate); 
fxTxn.BirthDate = Convert.ToDateTime(rawBirthDate); 

этот код, в свою очередь, возвращает 1/1/0001 12:00:00.000 AM. Однако MSSQL выбрасывает DateOutOfRangeException, говоря, что дата должна быть между 1/1/1753 и 12/31/9999.

Я полностью застрял здесь. В моей таблице SQL я разрешил столбцу BirthDate принимать нулевые значения. Вопрос в том, как заставить C# считать значения null DateTime? Конечным результатом будет то, что если Клиент не предоставил информацию о дате рождения, система все равно сможет сохранить запись, но столбец BirthDate в записи клиента все равно будет NULL.

+0

Что такое 'fxTxn'? Как вставить/обновить значение даты в базе данных? – Corak

+0

В качестве побочного примечания сообщение об ошибке указывает, что столбец является ['datetime'] (http://msdn.microsoft.com/en-us/library/ms187819.aspx). Если вы используете SQL Server 2008 или более позднюю версию, вы должны вместо этого использовать 'date' или' datetime2' - эти типы более эффективны, а 'datetime2' лучше выравниваются с классом .NET' DateTime'. –

+0

'DateTime' не имеет значения NULL, но 'DateTime?' Есть. Извините, это простая задача. –

ответ

2

Почему вы преобразовываете нулевое значение в datetime, если вы определяете переменную с нулевым значением, тогда она может хранить null vaue. На самом деле вам нужно определить BirthDate свойство также обнуляемым и сохранять нулевое значение, если пользователь не ввел дату как

fxTxn.BirthDate = string.IsNullOrEmpty(txtBirthDate) ? null : DateTime.Parse(txtBirthDate); 

В дб вам нужно сделать этот столбец, чтобы нулевое значение и проверить значение BirthDate как

if (fxTxn.BirthDate.HasValue) 
{ 
    // pass value in db otherwise not 
} 
2

как сделать C# считают нулевой DateTime значения

Ваше значение было нулевым. Проблема в том, что вы преобразовали его в стандартную дату Datetime, которая дает вам DateTime.MinValue (1/1/0001)

3

Что вам нужно сделать, так это: ваша таблица столбцов должна принимать значение null для BirthDate (это правильно). В C# сделайте переменную rawBirthDate нулевой.

Теперь условие вы должны проверить это:

rawBirthDate.HasValue 

Если это правда, то вставить дату в БД.

Если false, ничего не вставлять в db (это то, что означает «allow null» в SQL).

+1

вы ошиблись, неправильно, если false, то не передайте значение db. –

+0

@UpendraChaudhari Правильно, моя ошибка. – nestedloop

2

Я думаю, что проблема может быть в коде, который на самом деле вставляет значение в базу данных:

... 
var valueToInsert = rawBirthDate ?? DBNull.Value; 
... 
Смежные вопросы