String.IsNullOrEmpty和Datarow.IsXnull

时间:2010-04-13 10:25:50

标签: vb.net datatable

如何改进此代码?这个长篇大论的原因是我不能在数据行上使用string.IsNullOrEmpty而是我必须使用dr.IsHOUSENUMBERNull方法和string.IsNullOrEmpty来检查它是否为空。为什么是这样?数据库中的列有时为空,有时为NULL。

我确信这可以写得更好:

     If Not dr.IsHOUSENUMBERNull Then
           If Not String.IsNullOrEmpty(dr.HOUSENUMBER) Then
                sbAddress.AppendLine(dr.HOUSENUMBER + " " + dr.ADDRESS1)
           Else
                sbAddress.AppendLine(dr.ADDRESS1)
           End If   
     Else
           sbAddress.AppendLine(dr.ADDRESS1)      
     End If

2 个答案:

答案 0 :(得分:3)

你可以这样做,有点短:

 If dr.IsHOUSENUMBERNull OrElse String.IsNullOrEmpty(dr.HOUSENUMBER) Then
       sbAddress.AppendLine(dr.ADDRESS1) 
 Else     
       sbAddress.AppendLine(dr.HOUSENUMBER + " " + dr.ADDRESS1)
 End If

或者,如果你想要它更简洁,但在这种情况下我认为不太可读,请使用If()

sb.Address.AppendLine(If(r.IsHOUSENUMBERNull OrElse String.IsNullOrEmpty(dr.HOUSENUMBER), dr.ADDRESS1, dr.HOUSENUMBER + " " + dr.ADDRESS1))

答案 1 :(得分:0)

数据库的 NULL 和.NET的 null 之间存在差异(VB的 Nothing 应用于引用类型时)。

string.IsNullOrEmpty查找.NET的null - 而不是数据库的NULL。所以不需要检查null - 只有NULL / DBNull

如果将数据库的NULL或.NET的null存储到DataTable中,则会返回DBNull。

AppendLine(object)调用的object.ToString()

DBNull.Value.ToString()返回“”

鉴于所有这些信息,您的代码可以简化为:

sbAddress.Append(dr.HOUSENUMBER)
If Not dr.IsHOUSENUMBERNull AndAlso dr.HOUSENUMBER.Length <> 0 Then
    sbAddress.Append(" ")
End If
sbAddress.AppendLine(dr.ADDRESS1)