Объект не может быть преобразован из DBNull в другие типы с помощью DBNull.Value ? Конвертировать

Я пытаюсь прочитать значения из базы данных, которые, как мне известно, являются нулевыми в критериях, которые я ищу прямо сейчас. Итак, у меня был этот метод проверки этого: ld.Percentage = reader["DataWin3Data"] != DBNull.Value ? Convert.ToDouble(reader["DataWin3Data"]) : double.MinValue; Я использовал его раньше, когда поле может быть нулевым, и у него не было проблем. Я не совсем уверен, что делать в этой ситуации, как это исправить. Я включил свой соответствующий код ниже. Как изменить то, что я делаю в настоящее время, чтобы не было этой ошибки, когда есть нулевое значение?

ld.Percentage = reader["DataWin3Data"] != DBNull.Value ? Convert.ToDouble(reader["DataWin3Data"]) : double.MinValue;
ld.TotalCases = reader["DataWin8Data"] != DBNull.Value ? Convert.ToInt32(reader["DataWin8Data"]) : int.MinValue;
ld.TotalPercentage = reader["DataWin7Data"] != DBNull.Value ? Convert.ToDouble(reader["DataWin7Data"]) : double.MinValue;

person Kpt.Khaos    schedule 13.03.2014    source источник
comment
Как насчет Double.TryParse вместо этого? Возможно, больше строк кода, но безопаснее.   -  person DonBoitnott    schedule 13.03.2014
comment
@DonBoitnott может быть неплохой идеей, имеет ли значение, выходит ли он из читателя?   -  person Kpt.Khaos    schedule 13.03.2014
comment
Не должен. См.: stackoverflow.com/questions/1363185/   -  person DonBoitnott    schedule 13.03.2014


Ответы (1)


Что насчет этого?

ld.Percentage = reader["DataWin3Data"] == DBNull.Value 
                ? double.MinValue : (double)reader["DataWin3Data"];

Я использовал такой код много раз без проблем. Вы уверены, что всегда читаете одно и то же поле, которое также проверяете на нуль?

Кроме того, не используйте Convert, когда вы на самом деле не конвертируете. Это должно быть приведение (как в моем примере).

Если это не сработает, возможно, вы делаете что-то странное с данными. Возможно, какая-то сериализация на подходе? Попробуй это:

ld.Percentage = reader["DataWin3Data"] is DBNull 
                ? double.MinValue : (double)reader["DataWin3Data"];
person Luaan    schedule 13.03.2014
comment
Спасибо, это очень полезно, я воздержусь от использования convert, и я понял, что не все поля, которые могут быть нулевыми, имеют проверку на наличие ошибки. - person Kpt.Khaos; 13.03.2014
comment
У меня есть еще один вопрос, который, кажется, работает, когда есть ноль, но когда поле заполнено, оно дает мне ту же ошибку. Нет ли способа сделать это, используя вышеизложенное? - person Kpt.Khaos; 13.03.2014
comment
@Kpt.Khaos Вы уверены, что именно в этой строке возникает ошибка? Проверьте название столбцов. Вернее, напишите все это как метод, чтобы не полагаться на код без опечаток :D - person Luaan; 14.03.2014