Приведение значения NULL - PullRequest
5 голосов
/ 19 мая 2011

Я пытаюсь заполнить объект класса значениями из таблицы базы данных. Поле someObject.Property имеет тип NULL.

someObject.Property = Convert.ToInt32(dbReader["SomeField"]);

Итак, если SomeField равно null, Convert выдаст ошибку DBNull. Есть ли конкретный метод, который я должен использовать для этого?

Ответы [ 8 ]

5 голосов
/ 19 мая 2011

Это должно работать ...

someObject.Property = dbReader["SomeField"].Equals(DBNull.Value)
    ? null
    : (Int32)dbReader["SomeField"];

@John - Хороший улов. Изменить, чтобы отразить этот упущение.

3 голосов
/ 19 мая 2011

Этот метод может быть полезен для того, что вы пытаетесь сделать. Он попытается проанализировать значение столбца в его соответствующем типе, и, если это не удастся, вернет значение по умолчанию для типов.

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;
}
2 голосов
/ 19 мая 2011

Я использую это, заменив 0 на любое значение по умолчанию. Если свойство nullable, то по умолчанию используется C # null.

someObject.Property = (DBNull.Value.Equals(dbReader["SomeField"])) ? 0 : Convert.ToInt32(dbReader["SomeField"]);
1 голос
/ 19 мая 2011

Вы можете использовать TryParse. Это не будет специально проверять NULL, но сообщит вам, является ли он анализируемым или нет, что, вероятно, то, что вы действительно хотите.

bool result = Int32.TryParse(value, out number);
1 голос
/ 19 мая 2011

Существует TryParse

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

Вы также можете посмотреть на использование оператора слияния null ??, чтобы получить значение по умолчанию, если это необходимо.

0 голосов
/ 19 мая 2011
someObject.Property = Convert.ToInt32(dbReader["SomeField"].ToString()); 
0 голосов
/ 19 мая 2011
int someFieldIndex = reader.GetOrdinal("SomeField");
someObject.Property = reader.IsDbNull(someFieldIndex) ? null : (Int32?)reader.GetInt32(someFieldIndex);
0 голосов
/ 19 мая 2011

Вы можете использовать это:

if (reader["SomeField"] != DBNull.Value)
    someObject.Property = reader.GetInt32(dbReader("SomeField"));
...