2009-08-08 7 views
0

J'utilise ADO.NET Entity framework pour connecter DB et obtenir des données.Je veux faire s'il n'y a pas de données dans l'objet, il écrira "EMPTY FIELD" si son plein qu'il écrira pour afficher les données de coloumn à partir de la base de données. J'obtiens le message 'System.NullReferenceException' ERROr. quand il y a un objet nul dans objectcontext.Dont retourne une chaîne "EMPTY ROW". voici mes codes;quel est le problème avec ce code de condition 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()); 
     } 

Répondre

1

Je ne sais pas EF, mais vous déréférencement 2 objets dans les lignes suivantes:

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 

Si l'objet conteneur (. KODU, TB_IL, TB_TESIS_TIPI ou TB_TESIS_TURU) est toujours nulle, alors vous 'd obtenir une exception NullReferenceException.

Mon suppose que ce sont des noms de table et que certaines lignes n'ont pas de JOIN correspondant à ces tables. Dans tous les cas, vous auriez probablement besoin de réécrire les comme:

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 
); 

Pour le rendre un peu plus propre, une méthode:

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

y Thanx r mon sauveur :) –

0

Vous pouvez essayer item.attr.IsNull()

-Je crois que la chaîne est CAST pour l'amenant à drapeau l'élément comme nul avant le test IsNullOrEmpty.

0

Je n'ai pas utilisé entity-framework. Mais, pouvez-vous énumérer plus de "sorgu" quand la requête SQL ne renvoie aucune ligne? Pour tester cela, vous pouvez envelopper le foreach dans un try/catch et attraper l'exception NullReferenceException. Certaines personnes utiliseraient cette capture NullReferenceException pour configurer ce que vous faites, mais je ne le recommanderais pas.

Questions connexes