2011-05-19 71 views
5

我想用數據庫表中的值填充一個類對象。 someObject.Property字段是一個可爲空的int類型。投射一個NULL值

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

所以,如果SomeFieldnullConvert會給出一個DBNull錯誤。有沒有一個特定的方法,我應該用這個?

回答

5

這應該工作...

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

@John - 良好的漁獲物。編輯以反映該疏忽。

+1

-1:DBNull是一個類型,而不是一個值。你需要比較'DBNull.Value'。而且你最好使用'IsDbNull'。 – 2011-05-19 17:15:49

2

我用這個,用任何默認值代替0。如果該屬性爲nullable那麼您將默認爲C#null

someObject.Property = (DBNull.Value.Equals(dbReader["SomeField"])) ? 0 : Convert.ToInt32(dbReader["SomeField"]); 
+0

他的財產是'的Int32?'所以大概'null'是首選。否則相同的想法。 =) – Yuck 2011-05-19 16:58:38

+0

哎呀,在你的文章中錯過了。他沒有聲明「someObject.Property字段是一個可爲空的int類型。」 – Yuck 2011-05-19 17:01:21

0

您可以使用此:

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

你可以使用TryParse。這不會專門檢查NULL,但它會告訴你它是否可解析,這可能是你真正想要的。

bool result = Int32.TryParse(value, out number); 
+0

對不起,編輯您的答案認爲這是我的。恢復它。 – manojlds 2011-05-19 17:00:52

0
int someFieldIndex = reader.GetOrdinal("SomeField"); 
someObject.Property = reader.IsDbNull(someFieldIndex) ? null : (Int32?)reader.GetInt32(someFieldIndex); 
3

這種方法可能是你想要做什麼有用的。它會嘗試將列值解析爲相應的類型,如果不能,則返回類型默認值。

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
someObject.Property = Convert.ToInt32(dbReader["SomeField"].ToString());