none
DBNullについて RRS feed

  • 質問

  • いつもお世話になっています。VB.Net初心者です。DBNullについてお尋ねします。

     

    下記のような営業データセットの商品Tテーブルが設定されています。
    ※ただし分類フィールドにはNull値が含まれています。
    ID  分類       品名    価格
    1    果物     a-124   1,235
    2    野菜     b-032      512
    3     Null     b-132   2,602
    4    穀物     c-432      235
    5     Null     c-453     223
    6    果物     b-156     256

     

    Nullが含まれている分類フィールドを使って次のように果物だけを
    選択したく、次のようなコードを記述しました。

     

    '名前空間の宣言
    Imports System.data.OleDb

    ---------------------------------------

    Dim dr As DataRow
    For Each dr In 営業DataSet.商品T.Rows
            If dr("分類") = "果物" Then
                    DeBug.WriteLins(dr(”品名”))
            End If
    Next

     

    ところが、次のようなエラーが発生します。
    →InvalidCastExceptionは、ハンドルされませんでした。
    →演算子 '=' は 型 'DBNull' と 文字列 "銀行預金" に対して定義されていません。

    ※分類フィールドからNull値をなくすと正常に動作します。

     

    1.比較演算子の要素にNullがあるとエラーになるのですか?
    2.このエラーを回避する方法がありますか?

    3.通常は、データ作成時にNullを発生しないよう考慮しておく必要があるのでしょうか

     

    初心者なので、レベルを下げてご指導下さい。以上、よろしくご指導下さい。

    2007年8月7日 1:05

すべての返信

  • 少なくとも、例に挙げたコードとエラーメッセージを合わせないと「銀行預金って何?」となって回答がつきにくいかと。

     

    こんな感じでどうでしょう。

    Code Snippet

    Dim dr As DataRow
    For Each dr In 営業DataSet.商品T.Rows
      
            If Not dr.IsNull("分類") AndAlso dr("分類") = "果物" Then
                    DeBug.WriteLins(dr(”品名”))
            End If
    Next

     

     

    2007年8月7日 1:36
  • 囚人さん、早速のご指導ありがとうございました。また例に挙げたコードとエラーメッセージが不一致しており、

    大変失礼いたしました。エラー内容を一語一句間違いないように写し取ったためで、今後気をつけます。

     

    ご指導いただいたコードを早速、組み込んでテストしたところ見事にエラーも出ず正常に動作いたしました。

    なを実際のコードはもともと比較演算子が以下1.の通り2個使われていましたので、以下2.のように修正

    いたしました。Andだ4個になりますが正常に動作しておりますので問題ないと考えております。

    1.If dr("分類") = "果物" And If dr("品名") = "a-bcd" Then
    2.If Not dr.IsNull("分類") AndAlso dr("分類") = "果物" AndAlso _

          Not dr.IsNull("品名") AndAlso dr("品名") = "a-bcd" Then

     

    この問題は、今後も発生しそうなのでよく覚えておきます。大変ありがとうございました。

    2007年8月7日 3:58