Kyl*_*ned 1 .net vb.net null sqldatareader
好的,这很奇怪.今晚我在为公司网站添加功能时遇到了这个问题.
我正在构建一个自定义日历控件,用于查询我们的数据库以显示公司事件.这是情况,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
Run Code Online (Sandbox Code Playgroud)
但它没有,我仍然得到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
Run Code Online (Sandbox Code Playgroud)
真正让我感觉到的是,有一点我有这个:
, IIf(dr.IsDBNull(column), Convert.ToDateTime(dr("EventBeginDate")).AddDays(1), Convert.ToDateTime(dr("EventEndDate"))) _
Run Code Online (Sandbox Code Playgroud)
认为它应该工作,因为它应该只评估dr()它是否不是NULL.但是,它最终仍然出错,因为这个价值实际上已经存在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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12065 次 |
| 最近记录: |