У меня есть следующий фрагмент кода для установки параметра, который будет использоваться в инструкции 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 вместо встроенного (троичного) синтаксиса?
По этой ссылке есть что-то вроде ответа, но мне хотелось бы лучшего объяснения, потому что мне кажется чушью, что это не работает; Я бы назвал это ошибкой!