2009-08-08 9 views
0

私はADO.NET Entityフレームワークを使用してデータベースを接続し、データを取得しています。オブジェクトにデータがない場合は、書き込みよりも完全な場合は "EMPTY FIELD"リストビュー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を知らないが、あなたが次の行に2つのオブジェクトを参照解除している:

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 

コンテナオブジェクト(KODUTB_ILTB_TESIS_TIPIまたはTB_TESIS_TURUが。)これまでにnullの場合、あなたは'dは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を試してみたいことがあります()

-Iは、文字列へのキャストがIsNullOrEmptyテスト前にヌルとしてフラグにアイテムを、それを引き起こしていると考えています。

0

私はentity-frameworkを使用していません。しかし、SQLクエリが行を返さないときに "sorgu"を列挙できますか?

これをテストするには、try/catchでforeachをラップし、NullReferenceExceptionをキャッチすることができます。あなたがやっていることをセットアップするのにこのNullReferenceExceptionキャッチを使う人もいますが、私はそれをお勧めしません。

関連する問題