これは変です。今夜私の会社のサイトの機能を追加するときにこの問題に遭遇しました。.Net SqlDataReaderアイテムはNullです[VB]
私は、企業のイベントを表示するためにデータベースに問い合わせるカスタムカレンダーコントロールを構築しています。ここに状況があります。EndDate
の値が格納されていて、devシステムでイベントの1つがNULL
の値を持っています。それは唯一のテストシステムだから大したことはありませんが、とにかく安全な側でそれを使用しようとする前にチェックするかもしれません。
While dr.Read()
corporateTable.Rows.Add(New Object() { _
Convert.ToDateTime(dr("EventBeginDate")) _
, IIf(dr("EventEndDate") Is DBNull.Value, Convert.ToDateTime(dr("EventBeginDate")).AddDays(1), Convert.ToDateTime(dr("EventEndDate"))) _
, Convert.ToString(dr("EventType")) _
, Convert.ToString(dr("EventDescription")) _
, Convert.ToString(dr("EventMessage")) _
})
End While
しかし、それは、私はまだObject cannot be cast from DBNULL
エラーを取得して保持していない:私は、次のコードが動作すると考えました。だから私はそれを考えて、このコードを思いつきましたが、私はそれが気に入らず、醜いと思います。本当に私を取得します
While dr.Read()
Dim column As Integer = 0
While column < dr.FieldCount - 1
If dr.GetName(column) = "EventEndDate" Then
Exit While
End If
column += 1
End While
corporateTable.Rows.Add(New Object() { _
Convert.ToDateTime(dr("EventBeginDate")) _
, IIf(dr.IsDBNull(column), Convert.ToDateTime(dr("EventBeginDate")).AddDays(1), dr.Item(column)) _
, Convert.ToString(dr("EventType")) _
, Convert.ToString(dr("EventDescription")) _
, Convert.ToString(dr("EventMessage")) _
})
End While
事があり、ある時点で、私はこれを持っていた:
, IIf(dr.IsDBNull(column), Convert.ToDateTime(dr("EventBeginDate")).AddDays(1), Convert.ToDateTime(dr("EventEndDate"))) _
はそれがNULL
ない場合にのみdr()
を評価する必要があるので、それが動作する必要があることを考えます。しかし、値が実際にはNULL
だったので、最後にエラーを出し続けました。
最終的に私の質問には、長い説明を残して申し訳ありません。
値を使用する前にNULL
であるかどうかをチェックしていても、NULL
でないと呼び出されない部分でエラーが発生するのはなぜですか?私がIIF()
を使用しているという事実と関係しているのですか?それは全文を評価していますか?または、dr()
を使用すると、実行時に評価されますか?
私はちょうど困惑しており、正確に何が起こっているのか知りたいので、可能であれば、よりクリーンな解決策を思いついてください。
ありがとうございます!
ありがとうございます、私はそれを撃つでしょう。それが動作すれば、私は受け入れます。 –
また、この方法を使用して拡張メソッドを作成することもできます。http://bradwilson.typepad.com/blog/2008/01/c-30-extension.html – turtlepick
@ウィル:いつも笑うこの関数の 'IIf'は** ** if immediateの**の短縮形であり、これは真実から遠いものではありません。あなたがすぐに両方の条件を評価すると解釈しない限り。 =) – Yuck