Laden...

Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt bei Verwendung von zwei Methoden

Erstellt von FraBam vor 3 Jahren Letzter Beitrag vor 3 Jahren 951 Views
F
FraBam Themenstarter:in
10 Beiträge seit 2020
vor 3 Jahren
Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt bei Verwendung von zwei Methoden

Hallo liebe Forum Teilnehmer,

ich bekomme bei meinem Code eine System.NullReferenceException: "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt." Fehlermeldung. Ich habe schon den ganzen Nachmittag versucht das mit verschiedenen Ansätzen zu lösen und in den Foren nach einer ähnlichen Problemstellung gesucht, aber nichts gefunden. Wahrscheinlich ein trivialer Anfängerfehler.....

Ich habe zwei Methoden im Programm die sich im code behinde befinden. In der Methode SetFilter instanziiere ich die Klasse MaterialFilter. Die Initialisierung findet beim Start der Anwendung statt und ist public.


private void SetFilter()
        {
            string filter;
            
            
            matFilter = new MaterialFilter(cbxStorageLocation.Text, cbxProdSche.Text, txbSAPItemNo.Text, txbODUMatNo.Text,
                cbxMRPContr.Text, cbxProcType.Text, cbxProcGroup.Text, cbxSpecProc.Text);

            filter = "STORAGE_LOCATION LIKE '" + matFilter.StorageLocation + "%' AND PRODUCTION_SCHEDULER LIKE '" + matFilter.ProdSche + "%' " +
            "AND ITEM_NO LIKE '" + matFilter.SapItemNo + "%' AND ODU_MATERIAL_NO LIKE '" + matFilter.ODUItemNo + "%' " +
            "AND MRP_CONTROLLER LIKE'" + matFilter.MrpContr + "%' AND PROCUREMENT_TYPE LIKE '" + matFilter.ProcType + "%' " +
            "AND PROCUREMENT_GROUP LIKE '" + matFilter.ProcGroup + "%' AND SPECIAL_PROCUREMENT_KEY LIKE '" + matFilter.SpecProc + "%' ";

            //Prüfung auf selektiertes TabItem
            if (GlobalAttributes.SelectedTabIndex == 0)
            {
                dvInvTotal.RowFilter = filter;
            }
            else if (GlobalAttributes.SelectedTabIndex == 1)
            {
                dvInvChanged.RowFilter = filter;
            }
            

        }

Der Code funktioniert soweit ohne Fehler.

Jetzt rufte ich eine zweite Methode auf, wo ich auf das zuvor erzeugt Objekt der Klasse MaterialFilter (matFilter) zugreifen möchte. Hier wird der Fehler geschmissen.


public DataTable GetDataChartInvDev()
        {
            string userName = GlobalAttributes.UserName;
            string storedProcedure;

            string yearWeek1="202001";
            string yearWeek2="202043";

            
               

                // Ausführung Stored Procedure (sp_SIA_Get_PartNos_) und Tabelle tbl_SIA_Sel_PartNos füllen
                SetSelectedPartNos(GetStoredProcedure(), MyCollectionSet);

                storedProcedure = "sp_SIA_Get_PartNos_DEV";
                dataAccess.OpenSQLDatabase(DataAccess.ConnectionTo.SQL);
                dtInvDev = dataAccess.LoadDataTableSP(storedProcedure, userName, yearWeek1, yearWeek2, matFilter.StorageLocation, matFilter.ProdSche,
                    matFilter.MrpContr, matFilter.ProcType, matFilter.ProcGroup, matFilter.SpecProc, matFilter.SapItemNo, matFilter.ODUItemNo);

                dataAccess.CloseSQLDatabase();

                // Tabelleninhalt löschen
                DeleteSelectedPartNos();
           
            return dtInvDev;


        }

Danke schon mal im Voraus für die Hilfe.

Schöne Grüße

F
FraBam Themenstarter:in
10 Beiträge seit 2020
vor 3 Jahren

Hallo,

danke für die Info. Das habe ich mir natürlich vorher durchgelesen. Der SQL hat mit dem eigentlichen Problem nichts zu tun und wie gesagt, die Methode SetFilter funktioniert einwandfrei. Ich verstehe allerdings nicht, warum ich nicht in Methode GetDataChartInvDev das in SetFilter erzeugte Objekt matFilter aufrufen kann bzw. es beim Aufruf zur Fehlermeldung kommt. Der Debugger hilft mir auch nicht weiter, es zeigt mir auf von der Fehler entsteht (ist mir bekannt), was den Fehler verursacht (ist mir auch bekannt) und die Werte die für matFilter null sind. D.h. aus einen Grund, der ich nicht verstehe, wird nach Ausführung der Methode SetFilter das Objekt matFilter auf null gesetzt. Wahrscheinlich übersehe ich nur was, aber ich beschäftige mich seit Tagen damit und komme einfach nicht darauf.....:-(

Schöne Grüße

Christian

H
48 Beiträge seit 2020
vor 3 Jahren

du setzt den sql command über string funktionne zusammen was man nicht tun soll und im artikel steht wieso

der debugger sagt dir was genau null ist und du kannst prüfen wo du das objekt vergisst zu setzen oder du kannst mit einem breakpoint genau prüfen wodas null setzen passiert. du musst nur der anleitung folgen!

F
FraBam Themenstarter:in
10 Beiträge seit 2020
vor 3 Jahren

Danke für die Antwort.

Der sql ist eigentlich kein sql sondern der RowFilter für ein DataView Objekt. Den Filter muss man so zusammenbauen, auch wenn es nicht schön ist.

OK - werde mir den Debugger nochmals genau ansehen. Vielleicht habe ich was übersehen?

Schöne Grüße

C
2.121 Beiträge seit 2010
vor 3 Jahren

Ist es wirklich die selbe Variable matFilter auf die du da zugreifst?
Falls nein - dann ist das Problem klar. Du erzeugst das Objekt in eine Variable und greifst in der zweiten Methode auf eine andere Variable zu.
Falls ja - dann wird deine Variable zwischen den beiden Methoden auf null gesetzt. Such dir alle Stellen raus die darauf zugreifen und setze einen Breakpoint drauf. Dann findest du sie.

Dann noch eine andere Idee, die Variable gehört ja zu einem Objekt. Ist dieses Objekt bei den Aufrufen der beiden Methoden auch das selbe?