2013-12-13 36 views
1

我有這個代碼有點堵在後臺代碼形式:確定是否日期字段包含NULL值

using (SqlConnection connection1 = new SqlConnection(str)) 
{ 
    using (SqlCommand cmd = new SqlCommand("usp_select_claim_id_MERGE", connection1)) 
    { 
     cmd.CommandType = CommandType.StoredProcedure; 

     connection1.Open(); 
     { 
      using (SqlDataReader DT = cmd.ExecuteReader()) 
      { 

      //Format the Orig Open Date to strip off the time and just leave the date 
      if ((DT["Orig_Open_Date"]) == null) 
       { 
       OrigOpenDt = Convert.ToDateTime("1/1/1900"); 
       OrigOpenDt2 = ""; 
       } 
       else 
       { 
       OrigOpenDt = Convert.ToDateTime(DT["Orig_Open_Date"]); 
       OrigOpenDt2 = OrigOpenDt.ToString("MM/dd/yyyy"); 
       } 

當它擊中IF語句,它告訴我這是假的,所以代碼跳轉到「else」語句。但是,當我看到SQL Server表在討論記錄,它看起來像這樣(實際上,我只是在看的第一個記錄如下圖所示):

enter image description here

在我看來就像Orig_Open_Date (一直到右邊的列)都有NULL。

如果我在Orig_Open_Date中找到一個實際存在日期的記錄,它可以正常工作。如果沒有日期,它仍然會嘗試運行「else」語句,所以我的「if」語句必須是錯誤的。

無可否認,我是C#n00b。我在這裏做錯了什麼?

+0

當您遇到這種情況時,請進行調試並查看值。然後你會弄清楚該怎麼做。因此,請查看(DT [「Orig_Open_Date」])的值。 –

+0

我先試了一下。在即時窗口中,我輸入了?DT [「Orig_Open_Date」],並吐出了「{}」(不帶引號)。我不知道該怎麼做。 –

回答

4

嘗試DBNull.Value

if(value == DBNull.Value) 
+0

這工作。自從你第一次進入大門以後,我會給你支票的。謝謝! –

0

你也可以做它的SQL語句:

Select ISNULL(Orig_Open_Date,'1/1/1900') as Orig_Open_Date 
0

爲什麼你收到一個空值的原因是因爲空值讀者的從DB退出。我經常遇到這個問題,現在我總是檢查DBNull.value。

例:

db.GetCommand().CommandText = "SELECT * FROM EMPLOYE"; 
IDataReader reader = db.GetCommand().ExecuteReader(); 

if(reader.Read()) 
{ 
if(reader["HierdDate"] == DBNull.Value) 
// Do that 
else 
//Do this 
} 

它總是檢查的DBNull值一個DataReader可以返回一個好事。

相關問題