2016-12-08 1 views
0

So verwende ich Visual Studio, um eine asp.net Web App in C# zu erstellen, und ich brauche Hilfe in Bezug auf Datenbanken. Ich habe ein Registrierungsformular, das ausgefüllt ist und je nachdem, welcher Radiobutton ausgewählt ist, wird die Information in einer von zwei Tabellen gespeichert. Das Problem, das ich habe, ist, wenn ich den Absenden-Button in meiner App drücke, um die Daten zu speichern, gibt es eine Fehlermeldung aus. Der kuriose Teil ist, dass die Informationen immer noch in der Tabelle gespeichert sind, obwohl ich die Fehlermeldung bekomme.SqlException wurde von Benutzercode Fehler behandelt, aber Informationen noch in der Datenbank gespeichert

Kann jemand helfen erklären? Ich habe Bilder angehängt, die meine Code/Fehlermeldung und meine Tabellen zeigen. Vielen Dank!

EDIT - Dies ist meine letzte Ausgabe von unten geschrieben:

Nachdem er mit ein paar Sachen zwicken, ich bin nicht mehr die Fehlermeldung nicht bekommen. Jetzt funktioniert das übergeordnete Optionsfeld (speichert die Informationen in der übergeordneten Tabelle), das untergeordnete Optionsfeld jedoch nicht. (Es wird nichts an die Kindertabelle gesendet.

Also nach dem Auskommentieren des 'if (parentRadBtn.Checked)' Abschnitts, so dass der 'if (child.RadBtn.Checked)' Abschnitt zuerst ist, werden Informationen gespeichert für Kinder, wenn Sie die App laufen lassen. Es scheint also, dass es ein Problem mit meinen if-Anweisungen gibt und das Programm nicht den 'if (child.RadBtn.Checked)' Teil erreicht. Ich habe versucht, es zu einem 'if else' und verschiedenen anderen Dingen zu machen keiner von ihnen arbeiten. Kann mir jemand vor Ort, was für das Programm geändert werden muss durch die Kinder an laufen? Danke.

Tables

Code/error message

**Updated code** 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data.SqlClient; 

namespace Coursework 
{ 
public partial class Registration : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (Page.IsPostBack) 
     { 
      successLabel.Text = ("Your submission is now being stored in our database"); 
     } 
    } 

    protected void parentRadBtn_CheckedChanged(object sender, EventArgs e) 
    { 
     if (parentRadBtn.Checked) 
     { 
      firstNameBox.Text = string.Empty; 
      surnameBox.Text = string.Empty; 
      dayDobList.Text = string.Empty; 
      monthDobList.Text = string.Empty; 
      yearDobList.Text = string.Empty; 
      genderList.Text = string.Empty; 
      postcodeBox.Text = string.Empty; 
      teleBox.Text = string.Empty; 
      emailBox.Text = string.Empty; 
      userBox.Text = string.Empty; 
      passwordBox.Text = string.Empty; 

      genderList.Enabled = false; 
      dayDobList.Enabled = false; 
      monthDobList.Enabled = false; 
      yearDobList.Enabled = false; 

      surnameBox.Enabled = true; 
      postcodeBox.Enabled = true; 
      teleBox.Enabled = true; 
      emailBox.Enabled = true; 

      successLabel.Text = (""); 
     } 
    } 

    protected void passwordBox_TextChanged(object sender, EventArgs e) 
    { 

    } 

    protected void childRadBtn_CheckedChanged(object sender, EventArgs e) 
    { 
     else if (childRadBtn.Checked) 
     { 
      firstNameBox.Text = string.Empty; 
      surnameBox.Text = string.Empty; 
      dayDobList.Text = string.Empty; 
      monthDobList.Text = string.Empty; 
      yearDobList.Text = string.Empty; 
      genderList.Text = string.Empty; 
      postcodeBox.Text = string.Empty; 
      teleBox.Text = string.Empty; 
      emailBox.Text = string.Empty; 
      userBox.Text = string.Empty; 
      passwordBox.Text = string.Empty; 

      genderList.Enabled = true; 
      dayDobList.Enabled = true; 
      monthDobList.Enabled = true; 
      yearDobList.Enabled = true; 

      surnameBox.Enabled = false; 
      postcodeBox.Enabled = false; 
      teleBox.Enabled = false; 
      emailBox.Enabled = false; 

      successLabel.Text = (""); 
     } 
    } 

    protected void submitBtn_Click(object sender, EventArgs e) 
    { 
       SqlConnection connect = new SqlConnection("Data Source=THEBEAST;Initial Catalog=newregDB;Integrated Security=True;Pooling=False"); 
     { 
      if (parentRadBtn.Checked) 
      {     
       SqlCommand pa = new SqlCommand("INSERT INTO parent(parentID, firstname, surname, postcode, telephone, email, password) VALUES (@parentID, @firstname, @surname, @postcode, @telephone, @email, @password)", connect); 
       pa.Parameters.AddWithValue("@parentID", userBox.Text); 
       pa.Parameters.AddWithValue("@firstname", firstNameBox.Text); 
       pa.Parameters.AddWithValue("@surname", surnameBox.Text); 
       pa.Parameters.AddWithValue("@postcode", postcodeBox.Text); 
       pa.Parameters.AddWithValue("@telephone", teleBox.Text); 
       pa.Parameters.AddWithValue("@email", emailBox.Text); 
       pa.Parameters.AddWithValue("@password", passwordBox.Text); 

       connect.Open(); 
       pa.ExecuteNonQuery(); 
       connect.Close(); 

       if (IsPostBack) 
       { 
        userBox.Text = ""; 
        firstNameBox.Text = ""; 
        surnameBox.Text = ""; 
        postcodeBox.Text = ""; 
        teleBox.Text = ""; 
        emailBox.Text = ""; 
        passwordBox.Text = ""; 
       } 
       else if (childRadBtn.Checked) 
       {      
        SqlCommand ca = new SqlCommand("INSERT INTO children(childID, firstname, dob, gender, password) VALUES (@childID, @firstname, @dob, @gender, @password)", connect); 
        ca.Parameters.AddWithValue("@childID", userBox.Text); 
        ca.Parameters.AddWithValue("@firstname", firstNameBox.Text); 
        ca.Parameters.AddWithValue("@dob", dayDobList.Text + monthDobList.Text + yearDobList.Text); 
        ca.Parameters.AddWithValue("@gender", genderList.Text);      
        ca.Parameters.AddWithValue("@password", passwordBox.Text); 

        connect.Open(); 
        ca.ExecuteNonQuery(); 
        connect.Close(); 

        if (IsPostBack) 
        { 
         userBox.Text = ""; 
         firstNameBox.Text = ""; 
         dayDobList.Text = ""; 
         monthDobList.Text = ""; 
         yearDobList.Text = ""; 
         genderList.Text = ""; 
         passwordBox.Text = ""; 
        } 
       } 
      } 
     } 
    } 
} 

}

+0

Der Fehler ist sehr klar. Es heißt, dass Sie versuchen, einen Datensatz einzufügen, der bereits in der Tabelle vorhanden ist. –

+0

Ich weiß, es scheint klar, aber: 1. Es ist nicht wahr, ich gebe völlig unterschiedliche Informationen jedes Mal, wenn ich testen. 2. Die Informationen werden weiterhin in der Tabelle gespeichert. – ACostea

+0

Der Fehler besagt, dass Sie versuchen, einen doppelten Schlüssel in die Tabelle Children einzufügen. Der Datensatz, den Sie einfügen, existiert bereits mit dieser ID. –

Antwort

0

Schritt durch den Code den Wert von userBox.Text vor der Ausführung der Abfrage zu überprüfen. Spalte childID ist die einzige, die diesen Fehler verursachen kann, und die Datenbank meldet, dass es 0 ist (oder ist das() leere Zeichenfolge?).

Sie können auch versuchen, den Datensatz bei jedem Ausführen des Codes manuell zu löschen - Sie sollten den Fehler nicht mehr erhalten.

Zusätzliche Änderungen Sie vielleicht berücksichtigen:

  1. eine Einschränkung hinzufügen leere Zeichenfolge als Recht childID Wert disallowing;
  2. Benennen Sie alle Einschränkungen, einschließlich der Primärschlüsseleinschränkung (PK_children ist besser lesbar als das, was Sie erhalten);

Hoffe, das hilft.

+0

Hallo, ich habe Einschränkungen hinzugefügt, so dass etwas in die Primärschlüsselwerte eingegeben werden muss, danke :). Ich erwähnte oben, dass nach einigen Feinheiten, ich die Fehlermeldung nicht mehr bekomme. Jetzt funktioniert das übergeordnete Optionsfeld (speichert die Informationen in der übergeordneten Tabelle), das untergeordnete Optionsfeld jedoch nicht. (Nichts wird zum Kindertisch geschickt. Irgendwelche Ideen warum? Nochmals vielen Dank. – ACostea

+0

Wie bereits erwähnt, sind mehrere Ihrer Bedingungen tatsächlich Zuweisungen. (parentRadBtn.Checked = true) ist falsch, sollte sein (parentRadBtn.Checked == true) Wenn angenommen wird, dass Eltern- und Kinderradios nicht gleichzeitig überprüft werden können, sollte Ihre Logik das Kinderradio konditional als sonst haben, wenn nicht als. – Rumbleweed

+0

Hey nochmal :), jemand anderes wies darauf hin, also habe ich meinen aktualisierten Code mit dem ' = true 'Teile entfernt und die' (parentRadBtn.Checked) 'Anweisung hat ein anderes wenn nicht nur ein if gemacht. Es speichert immer noch keine Daten in der Child-Tabelle, selbst nachdem Sie diese Änderungen vorgenommen haben! – ACostea

Verwandte Themen