Установка параметра на 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 для привязки нулевого значения к параметру

Меня больше интересует ПОЧЕМУ, потому что очевидный обходной путь — просто использовать оператор if/else вместо встроенного (троичного) синтаксиса?

По этой ссылке есть что-то вроде ответа, но мне хотелось бы лучшего объяснения, потому что мне кажется чушью, что это не работает; Я бы назвал это ошибкой!

http://msdn.microsoft.com/en-us/library/ty67wk28.aspx

18
задан Community 23 May 2017 в 12:32
поделиться