2012-12-26 5 views
0

J'ai fait d'autres recherches et j'ai trouvé autre chose. Cependant, cette fois la boîte de message montre que le pwd a été changé mais quand j'ai rafraîchi la page dans le DB il n'a pas été changé. Voici le code:sql serveur connexion à db

SqlConnection sqlconn = new SqlConnection(); 

sqlconn.ConnectionString = @" ";   
sqlconn.Open(); 
string empCode = comboEmpCode.Text; 
string oldPwd = txtOldPwd.Text; 
string newPwd = txtNewPwd.Text; 
string confirmPwd = txtConNewPwd.Text; 
string sqlquery = "UPDATE [Employee] SET [email protected] where [email protected]"; 
SqlCommand cmd = new SqlCommand(sqlquery, sqlconn); 
cmd.Parameters.AddWithValue("@newpass", txtNewPwd.Text); 
cmd.Parameters.AddWithValue("@empcode", comboEmpCode.Text); 
cmd.Parameters.AddWithValue("@oldPwd", txtOldPwd.Text); 
cmd.Connection = sqlconn; 
cmd.ExecuteNonQuery(); 
SqlDataReader reader = null; 
reader = cmd.ExecuteReader(); 
while (reader.Read()) 
{ 
    if ((txtNewPwd.Text == reader["newPwd"].ToString()) & (txtConNewPwd.Text == (reader["confirmPwd"].ToString()))) { } 
} 
MessageBox.Show("Password was changed Successfully!", "Password Change", MessageBoxButtons.OK, MessageBoxIcon.Information); 
this.Close(); 
+4

Avez-vous réellement un ConnectionString ou vous passez le "" dans le code? – malkassem

+0

Utilisez-vous 'TransactionScope' n'importe où? Ou des transactions en général partout? Ceux-ci pourraient être annulés. – Oded

+1

Pourquoi avez-vous un paramètre '@ oldPwd' si vous ne l'utilisez pas dans la requête? Et que se passe-t-il avec 'ExecuteReader'? Cela ne retournera rien. – Oded

Répondre

2

Jetez un oeil à cette méthode, il retourne un vrai si la mise à jour a réussi et une fausse si elle n'a pas réussi, j'ai ajouté les boîtes de message pour fournir un peu de clarté lors d'un dépannage. De plus, j'ai enveloppé vos objets SQLConnection et SQLCommand dans les instructions Using qui devraient correctement disposer de ces objets bien quand vous avez fini.

public bool ChangePassword(string empCode, string newPassword, string oldPassword) 
{ 
    string connectionString = "@<Enter your Connection String Here>"; 

    string sql = "UPDATE [Employee] SET [email protected] where [email protected]"; 

    if (oldPassword != newPassword) 
    { 
     try 
     { 
      using (SqlConnection conn = new SqlConnection(connectionString)) 
      { 
       using (SqlCommand cmd = new SqlCommand(sql, conn)) 
       { 
        conn.Open(); 
        cmd.Parameters.AddWithValue("@newpass", newPassword); 
        cmd.Parameters.AddWithValue("@empcode", empCode); 
        cmd.ExecuteNonQuery(); 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(string.Format("{0}-{1}", ex.Message, ex.InnerException)); 
      return false; 
     } 
     return true; 
    } 
    else 
    { 
     MessageBox.Show(string.Format("Your New password {0}, can not be the same as the old password {1}. Please try again.", newPassword, oldPassword)); 
     return false; 
    } 
} 
+0

je l'ai essayé et cela n'a pas fonctionné. J'ai continué à cliquer sur le bouton 'changer le mot de passe' mais rien n'a fonctionné .. J'ai aussi changé le comboEmpCode.Text dans mon code comboEmpCode.SelectedItem parce que c'est une combobox mais j'ai eu une erreur msg abt paramétrée des requêtes. En outre, la zone de liste déroulante ne montre pas les codes de l'employé même si je les ai liés à lui. Une autre chose aussi j'ai eu des msgs d'erreur au sujet de mes fonctions 'privées de vide' après que j'ai inséré votre code. – GerryD

+0

Je voudrais essayer de coder les variables pour voir où le code se casse et ensuite travailler à partir de là. –