我想用数据库表中的值填充一个类对象。 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