9

データセットを使用してDBからデータをプルしています。行のフィールドの1つはですNULL。私はこれを知っている。ただし、次のvb.netコードはStrongTypingException(データセットデザイナーの自動生成されたget_SomeField()メソッドで)をスローします。

If Not IsDBNull(aRow.SomeField) Then
'do something
End If

ドキュメントとこの質問によると、それは問題ないはずです。

編集:If aRow.SomeField is DBNull.Value Then同じエラーを返します。ああ。

4

6 に答える 6

19

いくつかの追加情報:強く型付けされたDataSetを使用しているため、例外が発生します。StrongTypingExceptionのドキュメントには次のように書かれています。

ユーザーがDBNull値にアクセスしたときに、強く型付けされたDataSetによってスローされる例外。

強く型付けされたデータセットの使用法は、型指定されていないデータセットの使用法とは少し異なります。強く型付けされたデータセットを使用すると、呼び出すことができるフィールドのいくつかの拡張/追加メソッドを自動的に取得します。あなたの場合、あなたはおそらく電話しなければならないでしょう:

If Not aRow.IsSomeFieldNull Then
   'do something
End If
于 2011-01-14T09:57:27.933 に答える
7

これを試してください:aRow.IsSomeFieldNull

于 2011-01-14T09:49:01.733 に答える
4

それを回避するためのきちんとした方法があります。ただし、結果に注意する必要があります。

発生の例外を防ぐために、DataSetフィールドプロパティNullValueを「Null」または「Empty」(ニーズに合ったもの)に変更できます。デフォルトは「例外のスロー」に設定されています。

参考のためにここを見てください:msdnドキュメント

幸運を。

于 2011-06-20T09:55:36.983 に答える
4

object違いは、関連する質問では、インデクサーを介して型指定されていない値(つまり)について話していることです。を経由する.SomeFieldと、タイプはすでに含まれているので、これはなどである可能性があります。また、を試してみるのintは意味がありません。IsDBNullintintDBNull

基本的にSomeFieldは、のラッパーです(C#アクセントを失礼します...)

public int SomeField {
    get { return (int) this["someFieldName"]; }
    set { this["someFieldName"] = value; }
}

私は大したDataTable人ではありませんが、名前/インデックス/列で確認してみてください。または、列をnull許容としてマークしてNullable<int>(上記の例では)。

于 2011-01-14T09:42:22.403 に答える
1
**DateTime? ToDate = (row.IsToDateNull()) ? null : row.IsToDate;**
于 2012-02-23T07:44:53.577 に答える
1

この質問は古いですが、私が追加しているものは他のどの回答にも含まれていないようです。

使用する場合

If Not IsDBNull(aRow.item("SomeField")) Then
    'do something
End If

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

于 2013-07-10T15:15:12.120 に答える