Установка параметра в DBNull.Value с использованием троичного синтаксиса дает ошибку?
У меня есть следующий фрагмент кода для установки параметра, который будет использоваться в операторе INSERT для установки столбца VARCHAR в базе данных SQL Server. Мой объект-значение (с именем ilo) имеет свойство с именем Description, которое инициализируется значением String.Empty, а затем либо получает какое-либо значение, считываемое из XML, либо, если этот элемент XML пуст, он просто остается как String.Empty.
Поэтому при вставке в базу данных, если для свойства все еще задано значение String.Empty, я бы хотел, чтобы оно вставляло нулевое значение.
database.AddInParameter(cmd, "@description", DbType.String,
(ilo.Description.Equals(string.Empty)) ?
DBNull.Value :
ilo.Description);
Таким образом, в основном я говорю, что если ilo.Description равен string.empty, установите для параметра значение DBNull.Value, в противном случае установите для него значение ilo.Description.
Это дает следующую ошибку в Visual Studio ...
Ошибка 141 Тип условного выражения не может быть определен, поскольку не существует неявного преобразования между «System.DBNull». и «строка»;
Зачем?
Любопытно, что я могу сделать следующее без ошибок, что должно быть точно так же, как и при использовании встроенного условного синтаксиса, как описано выше!?!
if(ilo.Description.Equals(string.Empty))
{
database.AddInParameter(cmd, "@description", DbType.String, DBNull.Value);
}
else
{
database.AddInParameter(cmd, "@description", DbType.String, ilo.Description);
}
Я искал другие посты и нашел следующий, но он не отвечает на мой вопрос.
EntLib Way to Bind "Null" Значение в параметр
Меня больше интересует ПОЧЕМУ, потому что очевидный обходной путь состоит в том, чтобы просто использовать оператор if / else вместо встроенного (троичного) синтаксиса?
По этой ссылке есть своего рода ответ, но мне бы хотелось получить лучшее объяснение, потому что мне кажется, что Б.С. это не работает; Я бы назвал это ошибкой!