Veröffentlicht 22. März 201015 j 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 201015 j von lilith2k3
22. März 201015 j 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
22. März 201015 j Autor 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*
22. März 201015 j Autor 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!
22. März 201015 j 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"
23. März 201015 j Autor 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 ...
1. Mai 201015 j 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.
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.