c# - SQL数据读取器 - 处理空列值
【1】字符串检测
你需要检查null
:
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
值。
【2】int检测
您应该使用as
运算符和??
运算符作为默认值。 值类型需要被读取为可空并且给定默认值。
employee.FirstName = sqlreader[indexFirstName] as string;
employee.Age = sqlreader[indexAge] as int? ?? default(int);
as
运算符处理转换,包括检查DBNull。
【3】综合一下,需要测试
对于字符串,您可以简单地转换对象版本(使用数组运算符访问)并使用空字符串为null:
employee.FirstName = (string)sqlreader[indexFirstName];
要么
employee.FirstName = sqlreader[indexFirstName] as string;
对于整数,如果转换为可以为null的int,则可以使用GetValueOrDefault()
employee.Age = (sqlreader[indexAge] as int?).GetValueOrDefault();
或null-coalescing运算符(??
)。
employee.Age = (sqlreader[indexAge] as int?) ?? 0;