我使用SQLdatareader从数据库构建poco。除非在数据库中遇到空值,否则代码可以正常工作。例如,如果数据库中的FirstName列包含空值,则抛出异常。

employee.FirstName = sqlreader.GetString(indexFirstName);

在这种情况下处理空值的最佳方法是什么?


当前回答

Convert明智地处理DbNull。

employee.FirstName = Convert.ToString(sqlreader.GetValue(indexFirstName));

其他回答

当在数据读取器中使用列名返回行时,我不认为有NULL列值。

如果你做datareader["columnName"].ToString();它总是会给你一个值,可以是一个空字符串(字符串。如果需要比较,则为空)。

我会使用以下方法,不会太担心:

employee.FirstName = sqlreader["columnNameForFirstName"].ToString();

你应该使用as运算符和?? ?操作符用于默认值。值类型需要被读取为空,并给出默认值。

employee.FirstName = sqlreader[indexFirstName] as string;
employee.Age = sqlreader[indexAge] as int? ?? default(int);

as操作符处理转换,包括检查DBNull。

employee.FirstName = sqlreader[indexFirstName] as string;

对于整数,如果转换为可空整型,则可以使用GetValueOrDefault()

employee.Age = (sqlreader[indexAge] as int?).GetValueOrDefault();

或者空合并操作符(??)。

employee.Age = (sqlreader[indexAge] as int?) ?? 0;

一种方法是检查db是否为null:

employee.FirstName = (sqlreader.IsDBNull(indexFirstName) 
    ? ""
    : sqlreader.GetString(indexFirstName));

我使用下面列出的代码来处理被读入数据表的Excel表中的空单元格。

if (!reader.IsDBNull(2))
{
   row["Oracle"] = (string)reader[2];
}