2009-08-08 4 views
0

db를 연결하고 데이터를 가져 오는 ADO.NET Entity 프레임 워크를 사용하고 있습니다. 개체에 데이터가 없으면 쓸 수없는 것보다 "EMPTY FIELD"를 쓸 것입니다. listview coloumn 데이터에서 db.I 점점 'System.NullReferenceException'ERROr. objectcontext에 null 객체가있는 경우 "EMPTY ROW"문자열을 반환합니다. 여기 내 코드입니다;이 C# 조건 코드의 문제점은 무엇입니까

using (ITSEntities arama = new ITSEntities()) 
      { 
       var sql = "SELECT VALUE s_tesis FROM ITSEntities.TB_SAGLIK_TESIS AS s_tesis WHERE s_tesis.TESIS_AD like @p1"; 
       ObjectQuery<TB_SAGLIK_TESIS> sorgu = new ObjectQuery<TB_SAGLIK_TESIS>(sql, arama).Include("TB_IL").Include("TB_TESIS_TIPI").Include("TB_TESIS_TURU"); 
       sorgu.Parameters.Add(new ObjectParameter("p1", String.Format("{0}%", btnAra.Text))); 

            listTesis.Items.Clear(); 

       foreach (var item in sorgu) 
       { 

        ListViewItem listitem = new ListViewItem { Text = item.KODU.ToString() }; 
        listitem.SubItems.Add(item.TESIS_AD); 
        listitem.SubItems.Add(String.IsNullOrEmpty(item.TB_IL.ADI) ? "EMPTY ROW" : item.TB_IL.ADI); 
        listitem.SubItems.Add(String.IsNullOrEmpty(item.TB_TESIS_TIPI.TIP_AD) ? "EMPTY ROW" : item.TB_TESIS_TIPI.TIP_AD); 
        listitem.SubItems.Add(String.IsNullOrEmpty(item.TB_TESIS_TURU.TESIS_TURU) ? "EMPTY ROW" :item.TB_TESIS_TURU.TESIS_TURU); 
        listTesis.Items.Add(listitem); 
       } 
      } 
     } 
     catch (Exception ex) 
     { 

      MessageBox.Show(ex.InnerException.ToString()); 
     } 

답변

1

나는 EF 모르지만, 다음과 같은 라인이 객체를 역 참조하고 'NullReferenceException'이 발생합니다.

같음은 테이블 이름이며 일부 행에 해당 테이블에 대한 JOIN이 없다는 것입니다. 그것을 조금 청소기, 방법하려면

ListViewItem listitem = new ListViewItem { Text = (item.KODU ?? "").ToString() }; 
listitem.SubItems.Add(
    (item.TB_TL == null || String.IsNullOrEmpty(item.TB_IL.ADI)) 
    ? "EMPTY ROW" : item.TB_IL.ADI 
); 

: 어떤 경우에, 당신은 아마 사람들을 다시 작성해야 것 y는 나의 구세주 r에

string EmptyRowIfNull<T>(T o, Func<T, string> p) { 
    string s; 
    if (o != null) { 
     s = p(o); 
    } 
    return string.IsNullOrEmpty(s) ? "EMPTY ROW" : s; 
} 

listitem.SubItems.Add(EmptyRowIfNull(item.TB_IL, t => t.ADI)); 
listitem.SubItems.Add(EmptyRowIfNull(item.TB_TESIS_TIPI, t => t.TIP_AD)); 
listitem.SubItems.Add(EmptyRowIfNull(item.TB_TESIS_TURU, t => t.TESIS_TURU)); 
+0

고맙습니다 :) –

0

당신은 item.attr.IsNull을 시도 할 수 있습니다()

- 난 문자열로 캐스팅이 IsNullOrEmpty 테스트하기 전에 널 (null)로 플래그 항목을 그 원인이 있다고 생각합니다.

0

엔티티 프레임 워크를 사용하지 않았습니다. 그러나 SQL 쿼리가 행을 반환하지 않을 때 "sorgu"를 통해 열거 할 수 있습니까?

그걸 테스트하면 try/catch에서 foreach를 래핑하고 NullReferenceException을 catch 할 수 있습니다. 어떤 사람들은이 NullReferenceException catch를 사용하여 수행중인 작업을 설정하지만 권장하지는 않습니다. 컨테이너 개체 (. KODU, TB_IL는, TB_TESIS_TIPI 또는 TB_TESIS_TURU가) 지금까지 null의 경우 당신에게 다음

ListViewItem listitem = new ListViewItem { Text = item.KODU.ToString() }; 
listitem.SubItems.Add(String.IsNullOrEmpty(item.TB_IL.ADI) ? "EMPTY ROW" : item.TB_IL.ADI); 
listitem.SubItems.Add(String.IsNullOrEmpty(item.TB_TESIS_TIPI.TIP_AD) ? "EMPTY ROW" : item.TB_TESIS_TIPI.TIP_AD); 
listitem.SubItems.Add(String.IsNullOrEmpty(item.TB_TESIS_TURU.TESIS_TURU 

:

관련 문제