2011-04-24 7 views
3

Je dois effectuer une mise à jour dans un tableau (Devoirs). Mais il ne s'agit pas seulement de remplacer une ancienne valeur par une nouvelle; à la valeur déjà existante dans la colonne, je dois ajouter (SUM) la nouvelle valeur (la colonne est de type int). C'est ce que je l'ai fait jusqu'à présent, mais je suis coincé:Comment utiliser UPDATE dans ado net

protected void subscribeButton_Click(object sender, EventArgs e) 
    { 
     string txtStudent = (selectedStudentLabel.Text.Split(' '))[0]; 
     int studentIndex = 0; 
     studentIndex = Convert.ToInt32(txtStudent.Trim());   

     SqlConnection conn = new SqlConnection("Server=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\Database.mdf;Trusted_Connection=True;User Instance=yes"); 
     conn.Open(); 
     string sql2 = "UPDATE student SET moneyspent = " + ?????? + " WHERE id=" + studentIndex + ";"; 
     SqlCommand myCommand2 = new SqlCommand(sql2, conn); 

     try 
     { 
      conn.Open(); 
      myCommand2.ExecuteNonQuery(); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine("Error: " + ex); 
     } 
     finally 
     { 
      conn.Close(); 
     } 
    } 

Que dois-je ajouter intead de ??? pour atteindre mon objectif?

Est-il possible de le faire de cette façon? Je veux éviter d'utiliser de nombreuses requêtes.

+1

Veuillez arrêter de créer des commandes SQL en concaténant des chaînes! C'est le meilleur moyen d'obtenir une injection SQL désagréable: http://en.wikipedia.org/wiki/SQL_injection –

+0

Désolé mon pote mais c'est juste un devoir que je connais bien ce que les risques d'injection SQL sont. Mais merci quand même pour le rappeler. – sfrj

Répondre

12

Si je vous comprends bien (je ne suis pas sûr que je fais) que vous voulez quelque chose comme ceci:

string sql2 = "UPDATE student SET moneyspent = moneyspent + @spent WHERE [email protected]"; 
SqlCommand myCommand2 = new SqlCommand(sql2, conn); 
myCommand2.Parameters.AddWithValue("@spent", 50) 
myCommand2.Parameters.AddWithValue("@id", 1) 

Remarquez comment je l'ai utilisé les paramètres et non concaténation de chaîne, très important !!

+1

+1 pour l'utilisation des paramètres liés et la prévention des injections SQL. – Codo

+1

Je sais que je devrais utiliser des paramètres pour éviter l'injection SQL, mais ce n'est que quelques devoirs. J'ai fait comme vous l'avez dit 'SET moneyspent = moneyspent + someIntValue' mais je ne vois aucun changement dans ma base de données. Est-ce que je manque quelque chose? – sfrj

Questions connexes