質問

データセットを使用して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 など、試してみるのは意味がありません IsDBNullint, 、として 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

強くタイプされたデータセットを使用している場合でも、これは例外をスローしません

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top