2011-10-25 30 views
0

我有一個ASP.NET應用程序在返回空日期值時崩潰。在vb.net中檢查日期字段中的空值

的代碼行是:

excelWorksheet.Cells("A" & xlRowCounter).Value = IIf(IsDBNull(dRow("sysdate")), "", Format(dRow("sysdate"), "MM/dd/yyyy")) 

錯誤消息:

ERROR: System.ArgumentException: Argument 'Expression' is not a valid value.

我將如何檢查空日期,而代之以 「」 我的應用程序?

回答

2

嘗試使用If([condition], [true-part], [false-part])代替:

If(IsDBNull(dRow("sysdate")), "", Format(dRow("sysdate"), "MM/dd/yyyy")) 

如果你需要額外的檢查來測試什麼,你可以這樣做:

If(dRow("sysdate") Is Nothing Or IsDBNull(dRow("sysdate")), "", String.Format("{0:MM/dd/yyyy}", dRow("sysdate"))) 
+0

很高興成爲一個讓你超過10K ...祝賀JJ! – DotNetRookie

+0

喔!謝謝!天知道我已經爲它工作了! –

2

使用適當的If語句或新的if運算符。 if運算符與舊的IIF函數具有完全相同的語法,但僅評估它需要的參數。 IIF函數總是評估其所有參數。因此,即使dRow(「sysdate」)爲空,IIF函數的最後一個參數也會被評估並導致錯誤。

+0

我會......但我愛一行if語句| 8-) – DotNetRookie

+0

@DotNetCookie:你可以有你的一行if語句,並有它的工作,只需刪除刪除其中一個我的... IIF是一個有缺陷的方法從1.1開始,VB現在有了一個真正的三元運算符。 – jmoreno

+0

@jmoreno - 忘了if操作符。我已經更新了我的答案。我已經被困在.NET 2中太久了! :) – pipTheGeek

0

String類有IsNullOrEmpty方法。 你可以先用它檢查單元格,如果它真的用一個空字符串填充它。

0

您還可以使用可空日期時間:

Dim sysdate As DateTime? = dRow.Field(Of DateTime?)("sysdate") 
Dim result As String = If(sysdate.HasValue, sysdate.Value.ToString("MM/dd/yyyy"), "") 

我推測卓爾是一個DataTable

0

我是有同樣的問題,但我使用vb.net一個DataRow。 如果使用oledb從Excel工作表中獲取值,請首先檢查單元格格式以獲取其值。在這種情況下,格式是Excel工作表中的日期,Chris Dunway提供的方式完成了工作,thx兄弟。