我正在查询的数据库返回一些空值。 如何防止这种情况发生,并确保调用者获得一些数据。
我的代码是:
使用DataReader
while (dr.Read())
{
vo = new PlacementVO();
vo.PlacementID = dr.GetString(0);
如果我使用数据集,我可以这样做。
obj.email = (row["email"] == DBNull.Value) ? String.Empty : Convert.ToString(row["email"]);
由于
答案 0 :(得分:5)
如果你使用序数(你是),有IsDBNull(int ordinal)
。
所以:
string email = reader.IsDBNull(0) ? null : reader.GetString(0);
如果您正在使用字符串列名称,那么要使用它,您必须先调用GetOrdinal
,例如:
string GetSafeString(this IDataReader reader, string name)
{
int index = reader.GetOrdinal(name);
return reader.IsDBNull(0) ? null : reader.GetString(0);
}
当然,只查看一次序数更快,而不是每行一次。
类似的方法可用于int?
等,或使用默认值而不是null。
答案 1 :(得分:1)
另一种方法是将 isnull (列,可以为null ,替换为空时)添加到实际的SQL查询中。减少代码和工作,而无需在客户端代码中执行任何操作
答案 2 :(得分:0)
使用包装类来执行此功能。一个例子can be found here。我认为CSLA framework也具有此功能