lilith2k3 Geschrieben 22. März 2010 Geschrieben 22. März 2010 (bearbeitet) 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 ). 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 22. März 2010 von lilith2k3 Zitieren
Guybrush Threepwood Geschrieben 22. März 2010 Geschrieben 22. März 2010 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 Zitieren
lilith2k3 Geschrieben 22. März 2010 Autor Geschrieben 22. März 2010 warum die Abrage selsbt die Exception auslöst? Aua. Wurde Zeit für die Mittagspause ... "Abfrage" und "selbst" sollte man schon richtig schreiben können Öh, also ohne Code kann das ja spannend werden *lol* Zitieren
lilith2k3 Geschrieben 22. März 2010 Autor Geschrieben 22. März 2010 Ja, gut ... einziger Ausweg, zwar nicht der beste ... ich hab 'nen try-catch-Block drumgesetzt und im Fehlerfall eben die Tabellenzeile mit " " gefüllt. Fertig! Zitieren
Mcolli Geschrieben 22. März 2010 Geschrieben 22. März 2010 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" Zitieren
lbm1305 Geschrieben 22. März 2010 Geschrieben 22. März 2010 Was besagt die Message bzw. die Details der Exception? Zitieren
lilith2k3 Geschrieben 23. März 2010 Autor Geschrieben 23. März 2010 Alle anderen Werte des Containers sind ordentlich belegt; es findet sich der Name, der Vorname etc. des Mitarbeiters. Insofern bleibt nur die zweite Möglichkeit ... Zitieren
Rookian Geschrieben 1. Mai 2010 Geschrieben 1. Mai 2010 if (Container != null && Container.sie_sitzid == null){ //blablabla } so etwas funktioniert Aber keine Ahnung was du genau machen willst. So bald der Container null ist springt die CLR aus dem If-Statement. Zitieren
Empfohlene Beiträge
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.