Как добавить элемент в коллекцию из БД если поле в бд может быть null

class _Explain
{
        public int ID { get; set; }
        public string SelectType { get; set; }
        public string Table { get; set; }
        public string Type { get; set; }
        public string PossibleKeys { get; set; }
        public string Key { get; set; }
        public int KeyLen {get; set;}
        public string Ref { get; set; }
        public int Rows { get; set; }
        public string Extra { get; set; }
}
...
using (MySqlDataReader rdr = cmd.ExecuteReader())
{
                while (rdr.Read())
                {
                    expList.Add(new _Explain
                    {
                        ID = Convert.ToInt32(rdr["id"]),
                        SelectType = rdr["select_type"].ToString(),
                        Table = rdr["table"].ToString(),
                        Type = rdr["type"].ToString(),
                        PossibleKeys = rdr["possible_keys"].ToString(),
                        Key = rdr["key"].ToString(),
                        KeyLen = Convert.ToInt32(rdr["key_len"]),
                        Ref = rdr["ref"].ToString(),
                        Rows = Convert.ToInt32(rdr["rows"]),
                        Extra = rdr["Extra"].ToString()
});

Ошибка: Невозможно выполнить приведение данного объекта из DBNull к другому типу.
  • Вопрос задан
  • 5441 просмотр
Решения вопроса 1
@carbon88
.NET developer/ORM developer
во-первых, потрудитесь описывать подробнее в следующий раз.
во вторых, можно попробовать такое

SomeValue = (<поле, которое может быть null в базе> is DBNull) ? null : <сценарий когда не DBNull>
тут мы в скобках проверяем что тип объекта DBNull, после вопроса идет выражение при истинности условия, после двоеточия идет выражение при ложности условия.
Например,
var nullableValue = (rdr["type"] is DBNull) ? null : rdr["type"].ToString();

ну и соответственно использовать тип который может быть null
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
public string ?Type { get; set; }
Посмотрите про nullable types
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы