我使用SQLdatareader从数据库构建poco。除非在数据库中遇到空值,否则代码可以正常工作。例如,如果数据库中的FirstName列包含空值,则抛出异常。
employee.FirstName = sqlreader.GetString(indexFirstName);
在这种情况下处理空值的最佳方法是什么?
我使用SQLdatareader从数据库构建poco。除非在数据库中遇到空值,否则代码可以正常工作。例如,如果数据库中的FirstName列包含空值,则抛出异常。
employee.FirstName = sqlreader.GetString(indexFirstName);
在这种情况下处理空值的最佳方法是什么?
当前回答
和/或使用赋值的三元运算符:
employee.FirstName = rdr.IsDBNull(indexFirstName))?
String.Empty: rdr.GetString(indexFirstName);
替换每个属性类型的默认值(当为空时)…
其他回答
if(reader.IsDBNull(ColumnIndex)) {// logic}就像许多答案所说的那样。
我想提一下,如果你使用列名,比较类型可能会更舒服。
if(reader["TeacherImage"].GetType() == typeof(DBNull)) { //logic }
我倾向于用合适的东西替换SELECT语句中的空值。
SELECT ISNULL(firstname, '') FROM people
在这里,我将每个null替换为一个空白字符串。在这种情况下,代码不会抛出错误。
employee.FirstName = sqlreader[indexFirstName] as string;
对于整数,如果转换为可空整型,则可以使用GetValueOrDefault()
employee.Age = (sqlreader[indexAge] as int?).GetValueOrDefault();
或者空合并操作符(??)。
employee.Age = (sqlreader[indexAge] as int?) ?? 0;
你也可以检查这个
if(null !=x && x.HasRows)
{ ....}
在c# 7.0中,我们可以做到:
var a = reader["ERateCode"] as string;
var b = reader["ERateLift"] as int?;
var c = reader["Id"] as int?;
如果是,它会保持空值。