C# Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.?
In meinem aktuellen Code muss ich eine Programm schreiben in welchem es sich zum Employee-Management handelt. Alles funktioniert so weit, doch beim Editieren der Daten kommt folgender Fehler "siehe Überschrift".
private void button3_Click(object sender, EventArgs e)
{
if (EmpIDTB.Text == "" || EmpNameTB.Text == "" || EmpPhoneTB.Text == "" || EmpAddTB.Text == "")
{
MessageBox.Show("Missing Information");
}
else
{
try
{
Con.Open();
string query = "update EmployeeTbl set Empname='" + EmpNameTB.Text + "',empadd='" + EmpAddTB.Text + "',emppos='"+EmpPosTB.SelectedItem.ToString()+"',empdob= '"+EmpDateTB.Value.Date+"',empphone='"+EmpPhoneTB.Text+"',empedu='"+EmpEduTB.SelectedItem.ToString()+"',empgen='"+EmpGenderTB.SelectedItem.ToString()+"' where Empid='"+EmpIDTB.Text+"';";
SqlCommand cmd = new SqlCommand(query, Con);
cmd.ExecuteNonQuery();
MessageBox.Show("Employee Update Successfully");
Con.Close();
populate();
}catch (Exception Ex)
{
MessageBox.Show(Ex.Message);
}
in dem Code ist der abschnitt mit "Edit". Ich verstehe nicht ganz woran es scheitert. Würde mich um Hilfen freuen.
3 Antworten
![](https://images.gutefrage.net/media/default/user/8_nmmslarge.png?v=1551279448000)
Ich würde den Fehler erstmal eingrenzen, in dem ich mit
try {
Con.Open();
} catch (Exception Ex) {
MessageBox.Show(Ex.Message);
}
Anfange und dann Zeile für Zeile hinzufüge und gucke, wo genau der Fehler ausgelöst wird.
Ich vermute den Fehler bei Objekt Con oder dem Funktionsaufruf populate().
![](https://images.gutefrage.net/media/default/user/8_nmmslarge.png?v=1551279448000)
Schon, aber manchmal entstehen Fehler erst im Zusammenspiel von 2 Zeilen. Wenn der Fehler also nicht direkt ersichtlich ist, ist das eine bewährte Methode zum Ermitteln von Errors. Zumal es abhängig davon ist, was der Debugger genau ausgibt.
Wenn es so offensichtlich ist für den Debugger, hätte die Exception e ja auch einfach beinhalten können: "ToString() not possible because EmpPosTB.SelectedItem is null!"
![](https://images.gutefrage.net/media/default/user/15_nmmslarge.png?v=1551279448000)
Also ich habe es jetzt mal schrittweise gemacht und erst bei ""',emppos='" + EmpPosTB.SelectedItem.ToString() +" popt der fehler auf.
![](https://images.gutefrage.net/media/default/user/8_nmmslarge.png?v=1551279448000)
Dann scheint die Methode ToString() nicht zu funktionieren, da EmpPosTB.SelectedItem nicht existiert bzw. null ist.
![](https://images.gutefrage.net/media/default/user/15_nmmslarge.png?v=1551279448000)
![](https://images.gutefrage.net/media/user/Lamanini/1571594639777_nmmslarge__246_0_574_574_6ece859a87a5fb7fa36509ca22e7b436.jpg?v=1571594640000)
Unabhängig von dem Fehler:
Dein Code ist für SQL-Injections anfällig. Benutze die sicherlich vorhandenen Funktionen um Variablen anzugeben, so kann jeder der eines dieser Felder kontrolliert deine Datenbank mit den Rechten des Programmes verändern.
![](https://images.gutefrage.net/media/default/user/8_nmmslarge.png?v=1551279448000)
In welcher Zeile genau entsteht der Fehler?
Das passiert immer wenn ein Objekt nicht existiert (null ist) und du mit
objekt.methode()
darauf zugreifen willst.
![](https://images.gutefrage.net/media/default/user/15_nmmslarge.png?v=1551279448000)
Also ich habe es jetzt mal schrittweise gemacht und erst bei ""',emppos='" + EmpPosTB.SelectedItem.ToString() +" popt der fehler auf.
![](https://images.gutefrage.net/media/default/user/8_nmmslarge.png?v=1551279448000)
![](https://images.gutefrage.net/media/default/user/15_nmmslarge.png?v=1551279448000)
Eigentlich nicht.. Hab VS neu gestartet ging immer noch nicht, hab die Zeilen gelöscht nochmals 1zu1 hinzugefügt und auf einmal ging es... ich verstehe es manchmal nicht haha.. danke dir trotzdem
![](https://images.gutefrage.net/media/default/user/8_nmmslarge.png?v=1551279448000)
Beim nächsten mal einfach im Debugmodus starten dann kannst du zum Absturzzeitpunkt genau nachsehen welches objekt null ist
Den Debugger zu benutzen ist da doch viel einfacher 🙃