Обнуляемый DateTime и База данных - PullRequest
11 голосов
/ 01 февраля 2012

У меня есть обнуляемый объект datetime в C #.

DateTime? StartDate = new DateTime();

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

if (Complete == "N/A")
{
    StartDate = null;
}

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

using (SqlCommand command = new SqlCommand(updateSql, db))
{
    command.Parameters.Add("@Date_Started", SqlDbType.DateTime).Value = StartDate;
}

Как и следовало ожидать, если дата начала равна нулю, я получаю сообщение об ошибке, что тип неверный. Какой лучший способ продолжить отсюда?

Я рассмотрел проверку startdate на null, но я не уверен, как это сделать, когда тип обнуляется.

Ответы [ 2 ]

18 голосов
/ 01 февраля 2012

Это передаст значение NULL базы данных в качестве параметра, если StartDate имеет значение null:

using (SqlCommand command = new SqlCommand(updateSql, db))
{
    command.Parameters.Add("@Date_Started", SqlDbType.DateTime).Value = (object)StartDate ?? DBNull.Value;
}
1 голос
/ 01 февраля 2012
using (SqlCommand command = new SqlCommand(updateSql, db))
{
    if (StartDate.HasValue())
        command.Parameters.Add("@Date_Started", SqlDbType.DateTime).Value
            = StartDate;
    else
        command.Parameters.Add("@Date_Started", SqlDbType.DateTime).Value 
            = DBNull.Value;
}
...