标量查询:对象引用

时间:2016-11-15 09:40:21

标签: vb.net

我有一个简单的函数,用于返回值。这是返回字符串的逻辑。

If cmdx.ExecuteScalar Is DBNull.Value Or String.IsNullOrEmpty(cmdx.ExecuteScalar.ToString) Then
    Return String.Empty

Else
    Return cmdx.ExecuteScalar
End If

但是第一行返回此错误:附加信息:未将对象引用设置为对象的实例。该错误似乎有些零星。

也许这是处理返回值的更好方法,可能是Nulls

If cmdx.ExecuteScalar Is DBNull.Value Then
        Return String.Empty
Else
        If String.IsNullOrEmpty(cmdx.ExecuteScalar) Then
            Return String.Empty
        Else
            Return cmdx.ExecuteScalar
        End If
End If

或者有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

如果与cmd查询不匹配,则应考虑ExecuteScalar可返回Nothing(如果匹配包含NULL值,则为DBNull.Value)。如果您直接使用ExecuteScalar的返回而不测试Nothing,那么最终可能会出现臭名昭着的Null参考异常

因此最好以这种方式使用它(并避免两次调用ExecuteScalar)

Dim result = cmd.ExecuteScalar
if result is Nothing OrElse 
   result = DBNull.Value OrElse 
   string.IsNullOrEmpty(result.ToString) then
     .....
else
     ....
End If

答案 1 :(得分:0)

另一种方法是使用自VB14以来的 Null / Nothing检查。

Dim result as object = cmd.ExecuteScalar
If o Is DBNull.Value OrElse String.IsNullOrEmpty(o?.ToString) Then
   ...
Else
   ...
End If