我正在使用SQLdatareader从数据库构建POCOs。代码可以正常工作,除非它在数据库中遇到空值。例如,如果数据库中的FirstName列包含空值,则会引发异常。
employee.FirstName = sqlreader.GetString(indexFirstName);在这种情况下,处理空值的最佳方法是什么?
发布于 2009-11-21 01:25:53
您需要检查IsDBNull
if(!SqlReader.IsDBNull(indexFirstName))
{
employee.FirstName = sqlreader.GetString(indexFirstName);
}这是检测和处理这种情况的唯一可靠方法。
我将这些内容包装到扩展方法中,如果列确实为null,则倾向于返回默认值
public static string SafeGetString(this SqlDataReader reader, int colIndex)
{
if(!reader.IsDBNull(colIndex))
return reader.GetString(colIndex);
return string.Empty;
}现在你可以这样叫它:
employee.FirstName = SqlReader.SafeGetString(indexFirstName);而且您再也不用担心异常或null值了。
发布于 2010-07-22 19:54:22
对于默认值,应该结合使用as运算符和??运算符。值类型将需要被读取为可空的,并给出默认值。
employee.FirstName = sqlreader[indexFirstName] as string;
employee.Age = sqlreader[indexAge] as int? ?? default(int);as操作符处理类型转换,包括对DBNull的检查。
发布于 2014-10-07 23:10:48
employee.FirstName = sqlreader[indexFirstName] as string;对于整数,如果强制转换为可以为空的整数,则可以使用GetValueOrDefault()
employee.Age = (sqlreader[indexAge] as int?).GetValueOrDefault();或空合并运算符(??)。
employee.Age = (sqlreader[indexAge] as int?) ?? 0;https://stackoverflow.com/questions/1772025
复制相似问题