C # Update SQL server Tabelle

Ich habe versucht, eine update statement zu schreiben, die einige Informationen in meiner SQL server-Tabelle aktualisiert

Hier ist mein Code so weit, ich kann das Problem nicht sehen.

 protected void Page_Load(object sender, EventArgs e) { FirstNameEdit.Text = Session["FirstName"].ToString(); LastNameEdit.Text = Session["LastName"].ToString(); } protected void SubmitEdit_Click(object sender, EventArgs e) { if (FirstNameEdit.Text == "") { StatusMessage.Text = "Indtast venligst dit fornavn. "; } else { if (LastNameEdit.Text == "") { StatusMessage.Text = "Indtast venligst dit efternavn. "; } else { try { SqlConnection connection = new SqlConnection("Data Source=localhost;Initial Catalog=Break;Integrated Security=True"); SqlCommand command = new SqlCommand("SELECT * FROM Users", connection); command.Connection.Open(); string querystr = "UPDATE Users SET User_FirstName='@User_FirstName', User_LastName='@User_LastName' WHERE User_ID='@User_ID'"; SqlCommand query = new SqlCommand(querystr, connection); string User_ID = Session["ID"].ToString(); string User_FirstName = FirstNameEdit.Text; string User_LastName = LastNameEdit.Text; query.Parameters.Add("@User_ID", User_ID); query.Parameters.Add("@User_FirstName", User_FirstName); query.Parameters.Add("@User_LastName", User_LastName); query.ExecuteNonQuery(); string FirstName = FirstNameEdit.Text; Session.Add("FirstName", FirstName); string LastName = LastNameEdit.Text; Session.Add("LastName", LastName); StatusMessage.Text = "Din profil er opdateret"; command.Connection.Close(); } catch { StatusMessage.Text = "Noget er galt, prøv lidt senere"; } } } } 

Ich habe auch viel gesucht, aber es ist genau das gleiche finde ich. Vielleicht ist es etwas über die SQL-Abfrage.

Was ist genau das Problem?

Ich denke bei der Angabe des Parameters über parametrisierte Abfrage, brauchst du kein Zitat mehr zu verwenden

 string querystr = "UPDATE Users SET User_FirstName='@User_FirstName', User_LastName='@User_LastName' WHERE User_ID='@User_ID'"; 

soll werden

 string querystr = "UPDATE Users SET User_FirstName=@User_FirstName, User_LastName=@User_LastName WHERE User_ID=@User_ID"; 

Legen Sie die Parameter Platzhalter nicht mit einfachen Anführungszeichen ein. Auf diese Weise werden sie einfach String-Literale und Ihre Frage kann nicht funktionieren

  string querystr = "UPDATE Users SET User_FirstName=@User_FirstName, " + "User_LastName=@User_LastName WHERE User_ID=@User_ID"; 

Eine andere Sache zu beachten. Sind Sie sicher, dass Ihr User_ID-Feld ein String (Text, nvarchar, varchar) Feld in der database ist ?. Wenn es ein numerisches Feld ist, dann müssen Sie den als Parameter für diesen Feld übergebenen Wert in einen numerischen Wert umwandeln (IE Use Convert.ToInt32)

Also, wenn dies wahr ist, könnte der Code geändert werden als

 string User_ID = Session["ID"].ToString(); string User_FirstName = FirstNameEdit.Text; string User_LastName = LastNameEdit.Text; query.Parameters.AddWithValue("@User_ID", Convert.ToInt32(User_ID)); query.Parameters.AddWithValue("@User_FirstName", User_FirstName); query.Parameters.AddWithValue("@User_LastName", User_LastName); query.ExecuteNonQuery(); 

Ich habe die AddWithValue nach der Empfehlung in MSDN verwendet, die sagt

AddWithValue ersetzt die SqlParameterCollection.Add-Methode, die einen String und ein object benötigt. Die Überladung von Hinzufügen, die einen String annimmt und ein object wegen der möglichen Unklarheiten mit der SqlParameterCollection abgelehnt wurde.Add Überladung, die einen String und einen SqlDbType-Enumerationswert annimmt, wobei das Übergeben einer Ganzzahl mit dem String als Parameterwert oder The interpretiert werden könnte entsprechenden SqlDbType-Wert. Verwenden Sie AddWithValue, wann immer Sie einen Parameter hinzufügen möchten, indem Sie seinen Namen und seinen Wert angeben.

Allerdings ist der Vorteil bei der impliziten Umwandlung auch der Nachteil, da die Umwandlung nicht optimal ist. Ich kann als Hinweis auf diesen sehr gründlichen Artikel geben

Eine weitere Anmerkung im Auge zu behalten. Schlucken Sie keine exceptionn. In deinem Code ist die generische Nachricht, die dem Benutzer einen Fehler berät, nicht genug, damit du verstehst, was los ist Sie sollten Ihren Code durch replace

 try { ...... } catch(Exception ex) { // I let you translate... :-) StatusMessage.Text = "Noget er galt, prøv lidt senere " + "Error message=" + ex.Message; } 

Zunächst einmal, wie andere Leute sagten – keine Einzelkontingent in der Abfrage verwenden, brauchst du das nicht.

Zweitens: Wenn du Parameter zu deinem Befehl definierst, kannst du zwei Varianten verwenden:

1) query.Parameters.AddWithValue("@User_FirstName", User_FirstName);

oder

2) query.Parameters.Add("@User_FirstName", SqlDbType.VarChar).Value = User_FirstName;

Sie können query.Parameters.Add("@User_FirstName", User_FirstName); nicht verwenden query.Parameters.Add("@User_FirstName", User_FirstName);

 string queryStr = "UPDATE SET USER (account, user, password, permission_level)" + "VALUES ('" + tbxAccount.Text + "', '" + tbxUsername.Text + "', '" + tbxPassword.Text + "', '" + tbxPermission.Text + "');";