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

4

I have the following ASP.NET (VB) code:

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

由于LocationCity为空:

我遇到了“从类型 '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中最好的方法是什么


发生了什么?你是否已经执行 if 语句中的其他语句并且抛出了异常?调试器告诉你什么?如果检查,它是否真的是 DBNull?你使用的是哪个数据库和提供程序? - Simon Edström
2个回答

10

2
你可以使用 If(IsDBNull(q1("propertyName")), "", CStr(q1("propertyName")))
或者你可以将代码块实现为一个方法,然后为每个属性调用该方法。在我看来,这会使你的代码行比使用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"))

“IIF”执行“true”和“false”参数,因此你的答案中的那部分不起作用。 - freefaller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接