我有一个简单的函数,用于返回值。这是返回字符串的逻辑。
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
或者有更好的方法吗?
答案 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