ASP.NET VB - 从类型'DBNull'到类型'String'的转换无效

时间:2012-08-06 15:11:32

标签: asp.net vb.net

我有以下ASP.NET(VB)代码:

    strLocation = CStr(q1("LocationName")) + " " + CStr(q1("LocationAddress")) + " " + CStr(q1("LocationCity"))

由于LocationCity为null:

我从类型' DBNull'获得转换。输入' String'无效。

有没有办法解决这个问题。

如果它只是LocationCity,我可能会做类似的事情:

    If IsDBNull(q1("LocationCity")) Then
        strLocation = ""
    Else
        strLocation = CStr(q1("LocationCity"))
    End If

我也尝试过:

    strLocation = If(CStr(q1("LocationName")), "") + " " + If(CStr(q1("LocationAddress")), "") + " " + If(CStr(q1("LocationCity")), "")

但得到了相同的结果

在C#中我通常会使用??但不确定ASP.NET VB中的最佳方法

2 个答案:

答案 0 :(得分:9)

与VB.NET中的C#??相当的是IF Operator

strLocation = If(IsDBNull(q1("LocationCity")), "", CStr(q1("LocationCity")))

请勿使用IIF Function ,因为它已被弃用,不支持短路且不是类型安全的。

另见Is there a VB.NET equivalent for C#'s ?? operator?了解相关信息

答案 1 :(得分:2)

您可以使用If(IsDBNull(q1("propertyName")), "", CStr(q1("propertyName")))

或者您可以实现您作为方法显示的代码块,并为每个属性调用该方法。 IMO,它会使您的代码行比使用3个IIF语句更清晰

Function StringValue(q1 as Q1Type) as String
    If IsDBNull(q1("LocationCity")) Then   
        Return ""   
    Else   
        Return  CStr(q1("LocationCity"))   
    End If
End Function

strLocation = StringValue(q1("LocationName")) + " " + StringValue(q1("LocationAddress")) + " " + StringValue(q1("LocationCity"))