2012-12-26 62 views
0

我做了一些更多的研究,并提出了其他的东西。但是,这次消息框显示pwd已被更改,但是当我刷新数据库中的页面时并未更改。下面的代码:SQL服务器连接分贝

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

你确实有一个ConnectionString或者你在代码中传递@“”吗? – malkassem

+0

你是否在任何地方使用'TransactionScope'?或者在任何地方的交易?这些可能会回滚。 – Oded

+1

如果你没有在查询中使用它,为什么你有'@ oldPwd'参数? “ExecuteReader”是什么?那不会返回任何东西。 – Oded

回答

2

看看这个方法返回一个true,如果更新成功和错误,如果它不成功,我添加了消息框故障期间提供一点点清晰。另外,我将你的SQLConnection和SQLCommand对象封装在Using语句中,当你完成它们时,它们应该很好地处理这些对象。

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

我试过了,它没有工作。我不断点击'更改密码'按钮,但没有任何工作..我也改变了comboEmpCode.Text在我的代码comboEmpCode.SelectedItem,因为它的组合框,但我得到了错误消息ABT参数化查询。此外,组合框并未显示员工代码,但我将它们限制在此范围内。另一件事我也得到了关于我的'私人无效'功能的错误信息,我插入你的代码后。 – GerryD

+0

我会尝试硬编码变量,以查看代码破坏的位置,然后从那里开始工作。 –