2016-11-15 4 views
0

私は値を返すために使用する単純な関数を持っています。これは文字列を返すロジックです。スカラークエリ:オブジェクトリファレンス

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

おそらく 'OrElse'が必要です。 [this](http://stackoverflow.com/questions/1170754/or-versus-orelse)を見てください。そして、私は 'DBNull.Value'ではなく' Is Nothing'を使用します。 – Bugs

答えて

1

ExecuteScalarは、cmdクエリに一致するものがない場合はNothingを返します(一致する場合はNULL値を含むDBNull.Value)ことを考慮する必要があります。あなたは直接何のためにテストせずには、ExecuteScalarのリターンを使用する場合は、だから、より良い別のテイクをこの方法でそれを使用します(とは、ExecuteScalarへの2つの呼び出しを避けるため)

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

悪名高いnull参照例外

で終わる可能性を使用していますか? VB14以降のNull/Nothingチェック。

Dim result as object = cmd.ExecuteScalar 
If o Is DBNull.Value OrElse String.IsNullOrEmpty(o?.ToString) Then 
    ... 
Else 
    ... 
End If 
関連する問題