2016-08-11 3 views
2

Ich versuche, die Tabellen Studenten und Kurs beizutreten und dann eine Markierung (Wenn die Schaltfläche Hinzufügen gedrückt wird) in die Tabelle Student_Course mit den SID (Student ID) und CID (Course ID) Kombinationsfelder, die sind an Tabellen SID in Studenten und CID in Kursen gebunden.Wie bekomme ich die Informationen aus zwei Tabellen und füge sie in eine separate Tabelle ein?

Im Code habe ich versucht, die Tabellen zu verknüpfen, aber es gibt mir eine

„eine nicht behandelte Ausnahme des Typs‚System.InvalidOperationException‘in System.Core.dll aufgetreten“ `Fehlern. Ein Fehler tritt auf, wenn ich der Tabelle beitrete.

Wie würde ich das beheben? Oder gibt es einen anderen Weg, dies zu tun?

TLDR;

Also habe ich zwei Comboboxen namens CID und SID, wo ich die Kurs-ID und die Studenten-ID auswählen kann. Dann habe ich eine Textbox für Marks. Ich möchte in der Lage sein, die Kurs-ID und die Studenten-ID auszuwählen und dann die Markierungen hinzuzufügen.

private void btnAdd_Click(object sender, EventArgs e) 
 
    { 
 
     using (Entities2 db = new Entities2()) 
 
     { 
 
      int SID = Convert.ToInt32(cboSID.Text); 
 
      int CID = Convert.ToInt32(cboCID.Text);     
 

 
      Student_Course marks = (from c in db.Student_Course join s in db.Students on c.SID equals s.SID join o in db.Courses on c.CID equals o.CID where c.SID == SID && c.CID == CID select c).First(); 
 
      marks.Mark = Convert.ToInt32(txtMark.Text); 
 

 
      db.SaveChanges(); 
 
      MessageBox.Show("Marks Added"); 
 
     } 
 

 
     using (Entities2 db = new Entities2()) //link combobox and DataGridView to List in Student_Course 
 
     { 
 
      var studentCourse = from c in db.Student_Course select new { SID = c.SID, Mark = c.Mark }; 
 

 
      editDataGridView.DataSource = studentCourse.ToList(); 
 
     } 
 

 
     using (Entities2 db = new Entities2()) 
 
     { 
 
      var student = (from s in db.Students select s).ToList(); 
 

 
      cboSID.DisplayMember = "SID"; 
 
      cboSID.ValueMember = "SID"; 
 
      cboSID.DataSource = student; 
 
     } 
 

 
     using (Entities2 db = new Entities2()) 
 
     { 
 
      var course = (from c in db.Courses select c).ToList(); 
 

 
      cboCID.DisplayMember = "CID"; 
 
      cboCID.ValueMember = "CID"; 
 
      cboCID.DataSource = course; 
 
     } 
 
    }

+0

Sie erhalten Fehler, da cboSID.Text nicht der richtige Weg ist, ausgewählt Wert von Combobox zu erhalten. Verwenden Sie cboSID.SelectedValue, um die Studenten-ID aus der Combobox auszuwählen, cboCID.SelectedValue, um die Kurs-ID aus der Combobox auszuwählen –

+0

Das repariert es immer noch nicht – Anon

+0

Welcher Codeteil verursacht diesen Fehler? –

Antwort

2
private void btnAdd_Click(object sender, EventArgs e) 
    { 
     using (Entities2 db = new Entities2()) 
     { 
      int SID = Convert.ToInt32(cboSID.SelectedItem.ToString()); 
      int CID = Convert.ToInt32(cboCID.SelectedItem.ToString()); 
      int got_marks = Convert.ToInt32(txtMark.Text);   

      Student_Course marks = db.Student_Course.Where(sc => sc.SID == SID && c.CID == CID).FirstOrDefault(); 
      if(marks!= null){ 
       marks.Mark = got_marks; 
      }else{ 
       db.Student_Course.Add(new Student_Course{ 
        SID = SID, 
        CID = CID, 
        Mark = got_marks 
       }); 

      } 


      db.SaveChanges(); 
      MessageBox.Show("Marks Added"); 
     } 

     using (Entities2 db = new Entities2()) //link combobox and DataGridView to List in Student_Course 
     { 
      var studentCourse = from c in db.Student_Course select new { SID = c.SID, Mark = c.Mark }; 

      editDataGridView.DataSource = studentCourse.ToList(); 
     } 

     using (Entities2 db = new Entities2()) 
     { 
      var student = (from s in db.Students select s).ToList(); 

      cboSID.DisplayMember = "SID"; 
      cboSID.ValueMember = "SID"; 
      cboSID.DataSource = student; 
     } 

     using (Entities2 db = new Entities2()) 
     { 
      var course = (from c in db.Courses select c).ToList(); 

      cboCID.DisplayMember = "CID"; 
      cboCID.ValueMember = "CID"; 
      cboCID.DataSource = course; 
     } 
    } 
+0

Ich füge die Markierungen zur Datenbank hinzu, deshalb muss sie gespeichert werden. Und danke Vishal. Das hat funktioniert! – Anon

+0

@anon: Kein Problem. Froh, dass ich helfen konnte :) Du kannst auch die Antwort verbessern;) –

+0

Bereits erledigt: p – Anon

0
using (Entities2 db = new Entities2()) 
{ 
int SID = Convert.ToInt32(cboSID.SelectedValue);//Change cboSID.Text to cboSID.SelectedValue 
int CID = Convert.ToInt32(cboCID.SelectedValue);//Change cboCID.Text to cboCID.SelectedValue    
Student_Course marks = (from c in db.Student_Course join s in db.Students on c.SID equals s.SID join o in db.Courses on c.CID equals o.CID where c.SID == SID && c.CID == CID select c).First(); 
marks.Mark = Convert.ToInt32(txtMark.Text); 
//Delete this line db.SaveChanges(); 
MessageBox.Show("Marks Added"); 
} 
+0

Wie beantwortet das die Frage? –

+0

Es gibt keine Änderung in der Datenbank, da er nur einige Daten aus der Datenbank auswählt, so dass db.SaveChanges() nicht benötigt wird. Dies ist nur erforderlich, wenn einige Änderungen in der Datenbank vorgenommen werden. –

+0

Hey. Es half nicht mit dem Fehler, den ich erhalte, wenn ich versuche, mich an die Tische zu setzen. – Anon

Verwandte Themen