2010-12-12 7 views
0

Hé les gars J'utilise Visual Studio pour développer une application Windows. Csharp est la langue utilisée. J'utilise la méthode suivante pour mettre à jour mes enregistrements de membres. Il ne me donne pas une erreur lorsqu'il est appelé. mais quand je vérifie la base de données, les valeurs de mise à jour n'ont pas lieu. Ci-dessous le code suivant:Ne pas mettre à jour la base de données via SqlCeConnection sur dot net 3.5

public static void updatePersonInfo(int number, string password,string firstname, string lastname, string address, string city, string province, string postal, int typeid,bool suspend) 
    { 
     SqlCeConnection sqlConn = null; 
     SqlCeCommand cmdUpdate; 
     int susBit = 0; 
     if (suspend == true) 
     { 
      susBit = 1; 
     } 

     try 
     { 
      sqlConn = new SqlCeConnection(databaseString); 
      sqlConn.Open(); 


      cmdUpdate = new SqlCeCommand(@"UPDATE PersonInfo 
            SET First_Name = @fname, Last_Name [email protected], Address = @address, 
            City = @city, Province = @prov, Postal_Code = @post, Type = @type, 
            Password = @pass, Suspended = @susp 
            WHERE Number = @numb", sqlConn); 
      cmdUpdate.Parameters.Add(new SqlCeParameter("@numb", SqlDbType.Int)).Value = number; 
      cmdUpdate.Parameters.Add(new SqlCeParameter("@fname", SqlDbType.NVarChar)).Value = firstname; 
      cmdUpdate.Parameters.Add(new SqlCeParameter("@lname", SqlDbType.NVarChar)).Value = lastname; 
      cmdUpdate.Parameters.Add(new SqlCeParameter("@address", SqlDbType.NVarChar)).Value = address; 
      cmdUpdate.Parameters.Add(new SqlCeParameter("@city", SqlDbType.NVarChar)).Value = city; 
      cmdUpdate.Parameters.Add(new SqlCeParameter("@prov", SqlDbType.NVarChar)).Value = province; 
      cmdUpdate.Parameters.Add(new SqlCeParameter("@post", SqlDbType.NVarChar)).Value = postal; 
      cmdUpdate.Parameters.Add(new SqlCeParameter("@type", SqlDbType.Int)).Value = typeid; 
      cmdUpdate.Parameters.Add(new SqlCeParameter("@pass", SqlDbType.NVarChar)).Value = password; 
      cmdUpdate.Parameters.Add(new SqlCeParameter("@susp", SqlDbType.Bit)).Value = susBit; 
      cmdUpdate.ExecuteNonQuery(); 

     } 
     catch (Exception e) 
     { 
      MessageBox.Show(e.ToString()); 
     } 
     finally 
     { 
      if (sqlConn != null) 
      { 
       sqlConn.Close(); 
      } 
     } 

    } 

Répondre

2

Je ne peux rien déceler de faux dans la méthode.

raisons possibles que je vérifierais suivante:

  • Vous utilisez une valeur number qui ne correspond pas à un enregistrement existant.
  • La méthode n'est en fait jamais appelée.
  • Vous fournissez la même valeur qu'avant pour chaque champ afin qu'il soit mis à jour mais ne change pas.

Note: Un champ de bits correspond à une valeur booléenne, de sorte que vous ne devez pas créer une valeur numérique de la valeur booléenne, vous pouvez l'utiliser directement comme valeur:

cmdUpdate.Parameters.Add(new SqlCeParameter("@susp", SqlDbType.Bit)).Value = suspend; 
+0

la méthode est appelée. Je ne comprends pas pourquoi il ne met pas à jour la base de données. C'est le même problème avec la fonction de suppression. – reggie

0

Six mois plus tard , mais je suis juste tombé sur ce faisant une autre recherche.

Vous devez spécifier une taille pour vos champs de données nVarChar.

En utilisant votre code, je mets tous les nVarCharSqlDbTypes-50 ....

cmdUpdate.Parameters.Add(new SqlCeParameter("@numb", SqlDbType.Int)).Value = number; 
cmdUpdate.Parameters.Add(new SqlCeParameter("@fname", SqlDbType.NVarChar, 50)).Value = firstname; 
cmdUpdate.Parameters.Add(new SqlCeParameter("@lname", SqlDbType.NVarChar, 50)).Value = lastname; 
cmdUpdate.Parameters.Add(new SqlCeParameter("@address", SqlDbType.NVarChar, 50)).Value = address; 
cmdUpdate.Parameters.Add(new SqlCeParameter("@city", SqlDbType.NVarChar, 50)).Value = city; 
cmdUpdate.Parameters.Add(new SqlCeParameter("@prov", SqlDbType.NVarChar, 50)).Value = province; 
cmdUpdate.Parameters.Add(new SqlCeParameter("@post", SqlDbType.NVarChar, 50)).Value = postal; 
cmdUpdate.Parameters.Add(new SqlCeParameter("@type", SqlDbType.Int)).Value = typeid; 
cmdUpdate.Parameters.Add(new SqlCeParameter("@pass", SqlDbType.NVarChar, 50)).Value = password; 
cmdUpdate.Parameters.Add(new SqlCeParameter("@susp", SqlDbType.Bit)).Value = susBit; 
cmdUpdate.ExecuteNonQuery(); 

J'espère que vous avez déjà résolu ce problème.

Cette note s'adresse à tous les autres utilisateurs de cette manière.

Questions connexes