Я определил класс Персона свойство День рождения как обнуляемый DateTime? , так почему же в следующем примере не должен работать нулевой оператор объединения
cmd.Parameters.Add(new SqlParameter("@Birthday",
SqlDbType.SmallDateTime)).Value =
person.Birthday ?? DBNull.Value;
Я получил сообщение об ошибке "Оператор" ?? не может быть применен к операндам типа 'System.DateTime?' и 'System.DBNull' "
Следующее также получило ошибку компиляции:
cmd.Parameters.Add(new SqlParameter("@Birthday",
SqlDbType.SmallDateTime)).Value =
(person.Birthday == null) ? person.Birthday:DBNull.Value;
Я добавил приведение к (объекту) в соответствии с рекомендациями Refactor, и оно скомпилировалось, но оно не сработало должным образом, и значение было сохранено в базе данных sqlserver как null в обоих случаях.
SqlDbType.SmallDateTime)).Value =
person.Birthday ?? (object)DBNull.Value;
Может кто-нибудь объяснить, что здесь происходит?
Мне нужно было использовать следующий неуклюжий код:
if (person.Birthday == null)
cmd.Parameters.Add("@Birthday", SqlDbType.SmallDateTime).Value
= DBNull.Value;
else cmd.Parameters.Add("@Birthday", SqlDbType.SmallDateTime).Value =
person.Birthday;