dbnullをチェックすると、stringtypingexceptionがスローされます
質問
データセットを使用してDBからデータを引き出しています。連続したフィールドの1つはです NULL
. 。私はこれを知っている。ただし、次のVB.NETコードはaをスローします StrongTypingException
(Dataset DesignerのAutoenationated get_somefield()メソッドで:
If Not IsDBNull(aRow.SomeField) Then
'do something
End If
ドキュメントによると この質問 大丈夫です。
編集: If aRow.SomeField is DBNull.Value Then
同じエラーも返します。 argh。
解決
違いは、関連する質問では、型のない価値について話していることです(つまり、 object
)インデクサーを介して。通過するとき .SomeField
, 、タイプはすでに含まれています - したがって、これは int
など、試してみるのは意味がありません IsDBNull
で int
, 、として int
できる 一度もない なれ DBNull
.
本質的に SomeField
のラッパーです(C#アクセントを言い訳...)
public int SomeField {
get { return (int) this["someFieldName"]; }
set { this["someFieldName"] = value; }
}
私は巨大ではありません DataTable
人ですが、名前/index/列でチェックしてみることができます。または、列をnulableとしてマークして、 Nullable<int>
(上記の例で)。
他のヒント
いくつかの追加情報:例外は、 強く入力されたデータセット. stringtypingexception ドキュメントはそれを言っています:
ユーザーがDBNULL値にアクセスしたときに強く型付けされたデータセットによってスローされる例外。
強くタイプされたデータセットの使用法は、未熟なデータセットの使用とはわずかに異なります。強く入力されたデータセットを使用すると、電話をかけることができるフィールドの拡張/追加の方法を自動的に取得します。あなたの場合、あなたはおそらく電話する必要があります:
If Not aRow.IsSomeFieldNull Then
'do something
End If
これを試してください:arow.issomefieldnull
それを回避するためのきちんとした方法があります。しかし、あなたは結果を認識する必要があります。
発生の例外を防ぐために、データセットフィールドプロパティnullValueで「null」または「空」(ニーズに合ったものは何でも)に変更できます。デフォルトは「例外をスロー」するように設定されています。
参照については、こちらをご覧ください: MSDNドキュメント
幸運を。
**DateTime? ToDate = (row.IsToDateNull()) ? null : row.IsToDate;**
この質問は古いですが、私が追加したものは他の答えのどれにも含まれていないようです。
使用する場合
If Not IsDBNull(aRow.item("SomeField")) Then
'do something
End If
強くタイプされたデータセットを使用している場合でも、これは例外をスローしません