2017-10-24 4 views
2

So habe ich ein Formular, in dem es zwei Abschnitte eins zum Hinzufügen und eins zum Löschen gibt. enter image description here Aber das Problem ist, wenn ich Daten hinzufügen und nach dem, wenn ich die Combobox mit Abschnitt zu löschen überprüfen ich sehe alle vorherigen Daten mit Ausnahme der, die ich gerade hinzugefügt habe. Also brauche ich irgendeine Art von Lösung zum Aktualisieren und wieder alles in Combobox, sobald ich auf Hinzufügen klicken, aber kein Glück, die neuesten Daten werden nicht angezeigt.C# Oledb Update-Daten in der Anwendung

-Code für Schaltfläche Hinzufügen:

private void btnAddSubj_Click(object sender, EventArgs e) 
    { 
     OleDbDataReader cmd = ad.select("SELECT TOP 1 ID FROM subjects WHERE ID = " + int.Parse(txtSubjID.Text)); 
     if (cmd.Read()) 
     { 
      MessageBox.Show("Subject ID you entered is taken, please select a different one"); 
     } 
     else 
     { 
      ad.insert("insert into subjects (`ID`,`subjectName`) values(" + int.Parse(txtSubjID.Text) + ",'" + txtSubjName.Text + "')"); 

     } 
     populateComboBoxSubjName(); 
    } 

Hier Anzeige an Klasse zugeordnet, die ich erstellt und enthält alle Methoden zum Einfügen, auswählen, löschen, aktualisieren.

Code für populateComboBoxSubjName:

private void populateComboBoxSubjName() 
    { 
     comboBoxSubjName.Items.Clear(); 
     OleDbDataReader cmd = ad.select("SELECT * FROM subjects"); 

     while (cmd.Read()) 
     { 
      for (int f = 0; f < cmd.FieldCount; f+=2) 
      { 
       string data = (cmd.GetValue(f).ToString() + "-" + cmd.GetValue(f + 1).ToString()); 
       comboBoxSubjName.Items.Add(data); 
      } 
     } 
    } 

Schaltfläche Löschen Code:

private void btnDeleteSubj_Click(object sender, EventArgs e) 
    { 
     string selected = this.comboBoxSubjName.GetItemText(this.comboBoxSubjName.SelectedItem); 
     string[] idToDelete = selected.Split('-'); 
     ad.delete("DELETE FROM subjects WHERE ID=" + int.Parse(idToDelete[0])); 
    } 
+0

Können Sie uns auch 'bt, DeleteSbj_Click()' zeigen? – Wndrr

+0

@Wndrr hinzugefügt den Code –

+0

Verwenden Sie Parameter, um SQL-Injektion und Formatierungsprobleme zu vermeiden. Ihre for-Schleife innerhalb der while-read sieht nicht notwendig aus. Sie sollten die Feldnamen anstelle von Indizes verwenden, da sich die Feldpositionen in Zukunft ändern können. – LarsTech

Antwort

0

ich SQL-Abfragen mit einer anderen Klasse zu führen versuchte (erstellt i ein und codiert alle Abfragen und Verbindungen mit verschiedenen Methoden für jedes gleiche einfügen, löschen, auswählen), so würde ich nicht den ganzen Befehl immer wieder schreiben müssen, aber aus irgendeinem Grund hat es nicht funktioniert. Ich musste jedes Kommando immer wieder neu schreiben und das funktionierte perfekt.