Приведение нулевого значения
Я пытаюсь заполнить объект класса значениями из таблицы базы данных. Поле someObject.Property
является типом int, допускающим значение null.
someObject.Property = Convert.ToInt32(dbReader["SomeField"]);
Итак, если SomeField
есть null
, Convert
даст ошибку DBNull
. Есть ли конкретный метод, который я должен использовать для этого?
8 ответов:
Это должно сработать...
someObject.Property = dbReader["SomeField"].Equals(DBNull.Value) ? null : (Int32)dbReader["SomeField"];
@John
- Хороший улов. Отредактируйте, чтобы отразить эту оплошность.
Этот метод может быть полезен для того, что вы пытаетесь сделать. Он попытается разобрать значение столбца на соответствующий тип, и если это не удастся, он вернет значение по умолчанию для типов.
public T ParseValue<T>(System.Data.SqlClient.SqlDataReader reader, string column) { T result = default(T); int index = reader.GetOrdinal(column); if (!reader.IsDBNull(index)) result = (T)reader.GetValue(index); return result; }
Я использую это, заменяя
0
любым значением по умолчанию. Если свойствоnullable
, то по умолчанию используется C#null
.someObject.Property = (DBNull.Value.Equals(dbReader["SomeField"])) ? 0 : Convert.ToInt32(dbReader["SomeField"]);
Есть
TryParse
Http://msdn.microsoft.com/en-us/library/f02979c7.aspx
Вы также можете посмотреть на использование оператора null coalescing
??
, чтобы дать значение по умолчанию, если это необходимо.
Вы могли бы использовать
TryParse
. Это не будет специально проверять наличие нулей, но это скажет вам, является ли он разборчивым или нет, что, вероятно, то, что вы действительно хотите.bool result = Int32.TryParse(value, out number);