2017-03-09 68 views
0

正如我上面的標題,我在我的數據庫中得到了一個表,它是DateTime數據類型,它是空值。而我得到了這條線,我使用的代碼,但我不知道爲什麼它返回12:00DateTime null in database

string FitaCorIn1 = Convert.ToDateTime(req.FACorrectionIn1).ToString("hh:mm") == null ? "00:00" : Convert.ToDateTime(req.FAIn1).ToString("hh:mm"); 
string FitaCorOut1 = Convert.ToDateTime(req.FACorrectionOut1).ToString("hh:mm") == null ? "00:00" : Convert.ToDateTime(req.FAIn1).ToString("hh:mm"); 

所以你可以在我的代碼中看到如果日期時間的值爲null我想顯示00:00如果不爲空,它將顯示當前值。

注意

12小時制

+0

什麼是'req.FACorrectionIn1'是從數據庫中的值? –

+0

@ un-lucky它們在數據庫中都是空的 – KiRa

+1

看起來它正在返回「12:00」,因爲「ToString」方法返回「12:00」。將其與空比較不是評估爲TRUE。也許你不想比較'ToString'的返回值爲null。也許你甚至不需要調用'ToDateTime'方法。也許你只是想檢查'FACorrectionIn1'成員是否爲空。 – spencer7593

回答

0

您應該使用HH:mm格式。

Convert.ToDateTime(req.FAIn1).ToString("HH:mm"); 
+1

OP想要12小時格式不是24小時 – Nkosi

+0

'HH'是24小時制嗎? – KiRa

1

你應該檢查空轉換之前,否則你可能會得到轉換方法例外。 (根據評論)看起來FACorrectionIn1是DateTime類型,如果是這樣的話,你必須檢查它們是否與DateTime.MinValue比較,如果它是可以爲空的DateTime,你也可以檢查null。

爲什麼你越來越12:00即使在數據庫中的值是 空

同樣的原因FACorrectionIn1是一個DateTime對象,所以它不會爲空,這樣檢查空的條件由於其默認值爲01/01/0001 00:00:00,因此變爲虛假。所以當你使用.ToString("hh:mm")格式化他們時,你會得到12:00。所以,你必須這樣做:

string FitaCorIn1 = req.FACorrectionIn1 == DateTime.MinValue ? "00:00" : 
              Convert.ToDateTime(req.FAIn1).ToString("hh:mm"); 

如果您使用解析而不是爲Convert.To..

+0

DbNull是什麼意思? – KiRa

+0

@KiRa:關鍵字null表示無效的引用。 System.DbNull類表示數據庫字段中不存在的值,請參見[this](http://stackoverflow.com/questions/4958379/what-is-the-difference-between-null-and-system-dbnull-value )關於差異的更多信息 –

+0

如果我使用你的方法,我得到一個錯誤。運算符'=='不能應用於'System.DateTime'和System.DBNull類型的操作數。如果我使用單個'=',我也得到一個錯誤,不能將Implicit類型的'System.DBNull'轉換爲bool。 – KiRa

0

這將是巨大的我得到了它現在..感謝spencer7593。這是我的代碼看起來像現在。

string FitaCorIn1 = req.FACorrectionIn1 == null ? "00:00" : Convert.ToDateTime(req.FACorrectionIn1).ToString("hh:mm"); 
string FitaCorOut1 = req.FACorrectionOut1 == null ? "00:00" : Convert.ToDateTime(req.FACorrectionOut1).ToString("hh:mm"); 
+1

這些屬性似乎已經是日期時間,所以不需要轉換它們。 DateTime也不能爲null,所以condition語句總是會去else語句。 – Nkosi