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
alles was du brauchst findest du hier du musst es nur beachten
[FAQ] NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt [Artikel] Debugger: Wie verwende ich den von Visual Studio?
[Artikelserie] SQL: Parameter von Befehlen
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
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!
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
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?