[英].Net SqlDataReader Item is Null [VB]
好吧,這很奇怪。 今晚在為公司網站添加功能時遇到了這個問題。
我正在構建一個自定義日歷控件,該控件查詢我們的數據庫以顯示公司事件。 在這種情況下,存儲了一個EndDate
值,並且在開發系統上,其中一個事件具有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
錯誤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()
在運行時求值?
我只是很困惑,想知道到底發生了什么,因此,如果可能的話,提出一個更清潔的解決方案。
提前致謝!
IIf
總是同時評估真假部分-如果要避免這種情況,請使用內聯If
代替:
While dr.Read()
corporateTable.Rows.Add(New Object() { _
Convert.ToDateTime(dr("EventBeginDate")) _
, If(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
Iif函數正在評估每個語句,對您的空檢查使用不同的構造,例如IF函數
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.