Zum Inhalt springen

NullReferenceException bei Prüfung auf Null??


lilith2k3

Empfohlene Beiträge

Hi liebe Leute, ich habe hier gerade ein etwas merkwürdiges Problem.

Ich umschreibe es mal wie folgt.

Ich habe per Webservice (aus MS Dynamics CRM) eine Abfrage an eine Datenbank gestartet.

Die Datenbank liefert mir eine (BusinessEntity) Collection an Objekten zurück.

Anschließend iteriere ich mit foreach über die Collection.

Bei jedem Iterationsschritt wird das Element der Collection in einen anderen Typ gecastet. Bei mir enthält das "Container"-Objekt also das gecastete Resultat.

Container.new_name enthält entsprechend einen Namen (die Feldnamen sind nicht von mir :D).

Container.sie_abteilung enthält die Abteilung, wo der zugehörige Mitarbeiter auch arbeitet.

Es gibt den Fall, daß ich Mitarbeiter habe, die keinen Eintrag bei Abteilung haben. Entsprechend fange ich die Möglichkeit mit

if ( Container.sie_abteilung == null) { //blablabla }
ab, was auch Problemlos geht. Analog habe ich den Fall, daß der Ort, an dem ein Mitarbeiter gerade eingesetzt wird, ebenfalls leer ist.
if (Container.sie_sitzid == null){ //blablabla }

Das Kuriose an der Sache: genau an der Stelle erhalte ich eine NullReferenceException ?!

Also, ich will die Exception abfangen und schreibe eine Abfrage, bei der genau diese Exception ausgelöst wird ... Merkwürdig.

Zugang zu dem Code der entsprechenden Entität hab ich derzeit keinen.

Hat vllt. trotzdem jemand einen heißen Tip, warum die Abrage selsbt die Exception auslöst?

Wäre Euch sehr dankbar! :]

Bearbeitet von lilith2k3
Link zu diesem Kommentar
Auf anderen Seiten teilen

Zugang zu dem Code der entsprechenden Entität hab ich derzeit keinen.

Hat vllt. trotzdem jemand einen heißen Tip, warum die Abrage selsbt die Exception auslöst?

Weil in dem getter irgendwas gemacht wird das diese auslöst ;)

Ohne den entsprechenden Code zu kennen kann man da nicht viel zu sagen

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

Es gibt zwei Möglichkeiten warum diese Codezeile eine "NullReferenceException"

1. Die Variable "Container" ist mit null belegt.

2. "sie_sitzid" ist ein Propery, dessen "Get-Methode" mehr macht, als nur nur den Inhalt eines privaten Feldes zurück zu geben.

Bsp:


public class Cotnainer

{

    private int _sie_sitzid;


    public int sie_sitzid

    {

         get

         {

                Database db = null;

                String sql = "Select bla From blu";

                try 

               {

                     // KommentarMarke 1

                     db = DatabaseFactory.Create("ConnectionString");

                }

                finally

                {

                      // KommentarMarke 2

                     using (IDataReader reader = db.ExecuteReader(CommantType.Text, sql)) 

                     {

                          if (reader.Read()) 

                          {

                               return Covnert.ToInt32(reader["sie_sitzid"].ToString());

                          }

                     }

                     return  _sie_sitzid;

                 }

          }

         set

         {

                this. _sie_sitzid = value;

          }

     }

}


In dem Beispiel wird versucht "sie_sitzid" neu aus der Datenbank auszulesen. Wenn dort nix gefunden wird, wird der Wert der Feldvariable zurück gegeben.

Wenn bei " // KommentarMarke 1" das erzeugen der Database fehlschlägt bleibt das feld "db" mit null belegt und das führt im finally block bei " // KommentarMarke 2" zu diese Exception die dann weiter gereicht wird an deine Codezeile.

Wenn der Code von der Klasse "Container" in deinem Projekt hinterlegt ist und nicht z.b. via DLL eingebunden ist würde der Compiler bei " // KommentarMarke 2" anhalten und nicht erst bei deiner geposteten Codezeile.

Database und DatabaseFactory sind Klassen der "Microsoft Enterprise Library"

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 1 Monat später...

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...