我想用數據庫表中的值填充一個類對象。 someObject.Property
字段是一個可爲空的int類型。投射一個NULL值
someObject.Property = Convert.ToInt32(dbReader["SomeField"]);
所以,如果SomeField
是null
,Convert
會給出一個DBNull
錯誤。有沒有一個特定的方法,我應該用這個?
我想用數據庫表中的值填充一個類對象。 someObject.Property
字段是一個可爲空的int類型。投射一個NULL值
someObject.Property = Convert.ToInt32(dbReader["SomeField"]);
所以,如果SomeField
是null
,Convert
會給出一個DBNull
錯誤。有沒有一個特定的方法,我應該用這個?
這應該工作...
someObject.Property = dbReader["SomeField"].Equals(DBNull.Value)
? null
: (Int32)dbReader["SomeField"];
@John
- 良好的漁獲物。編輯以反映該疏忽。
我用這個,用任何默認值代替0
。如果該屬性爲nullable
那麼您將默認爲C#null
。
someObject.Property = (DBNull.Value.Equals(dbReader["SomeField"])) ? 0 : Convert.ToInt32(dbReader["SomeField"]);
您可以使用此:
if (reader["SomeField"] != DBNull.Value)
someObject.Property = reader.GetInt32(dbReader("SomeField"));
int someFieldIndex = reader.GetOrdinal("SomeField");
someObject.Property = reader.IsDbNull(someFieldIndex) ? null : (Int32?)reader.GetInt32(someFieldIndex);
這種方法可能是你想要做什麼有用的。它會嘗試將列值解析爲相應的類型,如果不能,則返回類型默認值。
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;
}
someObject.Property = Convert.ToInt32(dbReader["SomeField"].ToString());
-1:DBNull是一個類型,而不是一個值。你需要比較'DBNull.Value'。而且你最好使用'IsDbNull'。 – 2011-05-19 17:15:49