2013-12-13 3 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

Если у вас возникли такие ситуации, отлаживайте его и увидите значение. Тогда вы поймете, что делать. Поэтому отладка n показывает, что такое значение (DT ["Orig_Open_Date"]). –

+0

Я пробовал это первым. В окне Immediate я набрал? 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

Причина, почему вы получили в пустое значение из-за нулевого значения, что читатель извлечение из БД. Я часто сталкиваюсь с этой проблемой, и теперь я всегда проверяю DBNull.value.

Exemple:

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 может вернуться.

Смежные вопросы