VB.Net是DataRow.IsNull或Format(datetimevalue,"T")的问题?

Jim*_*ans 1 vb.net datetime dbnull

我正在开发一个新的ASP.Net 4.0数据驱动的应用程序.在DAL中,我检查所有数据的NULL值,并在NULL时默认为正确的数据.我有一个奇怪的问题.两个日期回来了 - 一个我只需要时间.完整日期的第一行代码可以正常工作 - 但第二行代码错误指向格式字符串,但奇怪的是它在NULL值上出错,它不使用格式字符串而只返回Date.MinValue.当第二行获取数据时,它会正确格式化返回.

Dim dr As DataRow
.TourDate = IIf(dr.IsNull("tourdate"), Date.MinValue, Format(dr("tourdate"), "MM/dd/yyyy"))

.TourTime = IIf(dr.IsNull("tourtime"), Date.MinValue, Format(dr("tourtime"), "T"))
Run Code Online (Sandbox Code Playgroud)

当dr("tourtime")为NULL时,错误出现在第二行 - 错误是:参数'Expression'不是有效值.

Sea*_*ter 6

IIf 在VB.Net中不进行短路评估,因此即使值为null,也会执行Format调用.

您需要使用If:

.TourTime = If(dr.IsNull("tourtime"), Date.MinValue, Format(dr("tourtime"), "T"))
Run Code Online (Sandbox Code Playgroud)

这与此处描述的问题相同:使用VB.NET IIF我得到NullReferenceException