处理来自DB的空值

时间:2008-12-18 08:22:27

标签: c# .net

我正在查询的数据库返回一些空值。 如何防止这种情况发生,并确保调用者获得一些数据。

我的代码是:

使用DataReader

        while (dr.Read())
        {
            vo = new PlacementVO();
            vo.PlacementID = dr.GetString(0);

如果我使用数据集,我可以这样做。

 obj.email = (row["email"] == DBNull.Value) ? String.Empty : Convert.ToString(row["email"]);

由于

3 个答案:

答案 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也具有此功能