2017-10-18 1 views
0

Je travaille sur une base de données avec C# et la recherche dans la base de données n'est pas un problème, j'obtiens les informations correctes lors de la recherche. Toi si je veux mettre à jour ma base de données avec de nouveaux Tigres (par exemple) ça va être mis à jour. Mon auto ne peux pas voir les problèmes avec le code et je ne reçois aucune erreur. Où le problème peut-il être? Voici le code:Impossible de mettre à jour ma base de données SQL avec C#

public void UpdateTigers(string[] array, string persNo) 
    { 
     //Creating the connection string. 
     string connectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Owner.mdf;Integrated Security=True"; 
     //Creating a connection to the database with the connection string value. 
     using (SqlConnection con = new SqlConnection(connectionString)) 
     { 
      //Opening the connection to the SQL database 
      con.Open(); 
      //Creating a commands(querys) to be used. 
      SqlCommand cmd = new SqlCommand("UPDATE Owner SET [email protected] WHERE Personnummer=" + persNo, con); 
      if (array[6] != "") 
      { 
       cmd = new SqlCommand("UPDATE Owner SET [email protected], [email protected] WHERE Personnummer=" + persNo, con); 
      } 
      if (array[7] != "") 
      { 
       cmd = new SqlCommand("UPDATE Owner SET [email protected], [email protected], [email protected] WHERE Personnummer=" + persNo, con); 
      } 
      //Adding to the SqlCommand what @Name got for value. 
      cmd.Parameters.AddWithValue("@tiger1", array[6]); 
      if (array[6] != "") 
       cmd.Parameters.AddWithValue("@tiger2", array[7]); 
      if (array[7] != "") 
       cmd.Parameters.AddWithValue("@tiger3", array[8]); 
      //Sending the request to the database. 
      cmd.ExecuteNonQuery(); 

      //No need for a con.Close() because the using statement closes it automatically. 
     } 
+1

quel résultat obtenez-vous? –

+0

Vérifiez la valeur renvoyée depuis 'cmd.ExecuteNonQuery();'. Si c'est plus de 0, votre mise à jour fonctionne correctement. –

+2

Qu'est ce que array [0] à array [5]? Vous devez également utiliser un paramètre pour Personnummer, la concaténation de chaîne est un risque d'injection SQL. – KnarfaLingus

Répondre

0

Ne pas entasser tout le CRUD dans une méthode. créez une méthode pour chacun et renvoyez true si la requête s'est exécutée avec succès et false dans le cas contraire. Exemple:

Utilisez try catch. s'il ne fait pas exception, la requête a été exécuté avec succès, puis retourne vrai si sucess, return false si exemple isnt

public static bool UpdateTiger(Tiger p) 
{ 
    var command = new SqlCommand(); 
    command.CommandText = "UPDATE Owner SET [email protected] WHERE [email protected]"; 

    command.Parameters.AddWithValue("@tiger1", p.tiger1).Direction = ParameterDirection.Input; 
    command.Parameters.AddWithValue("@pernum", p.pernum).Direction = ParameterDirection.Input; 

    try 
    { 
     SqlHelper.ExecuteNonQuery(command); // this is where I run the procedure 
     return true; 
    } 
    catch (Exception e) 
    { 

     return false; 
    } 

puis créer une autre méthode pour d'autres types de mises à jour

+0

alors s'il y a une exception, vous pouvez le voir dans le (Exception e) – Kokombads

0

J'ai trouvé le problème. J'avais oublié de mettre à jour mon tableau avant de l'envoyer au code :). Merci pour votre temps!

0

Est-ce que persNo est passé comme chaîne? S'il s'agit d'une chaîne réelle, vous pouvez vérifier la requête. Si une chaîne, votre requête ressemblerait à ceci: ...WHERE Personnummer=someString quand vous voudriez vraiment ...WHERE Personnummer='someString'. Si ce n'est pas le cas, essayez de mettre une pause dans le code dans Visual Studio sur la ligne après que cmd est défini ou Debug.Print(cmd.CommandText); quelque part après qu'il est défini pour voir quelle est la requête en cours d'exécution. Étant donné qu'il n'y a pas d'erreur, je dirais que votre condition WHERE ne fournit aucune correspondance pour mettre à jour quoi que ce soit dans la base de données.