【发布时间】:2011-03-31 00:38:06
【问题描述】:
我正在尝试更改用户密码。我无法更新密码:(。我收到的消息是密码已更改,因为密码未更改。。 我的代码如下..请如果有人能建议我哪里出错了。我只是一个初学者...
protected void Button1_Click(object sender, EventArgs e)
{
DatabaseLayer data = new DatabaseLayer();
string username = Session["Authenticate"].ToString();
string password = TextBox1.Text;
string newpass = TextBox2.Text;
string confirm = TextBox3.Text;
string flag = "";
if (newpass.ToString() == confirm.ToString())
{
flag = data.passwordChange(username, password, newpass);
Literal1.Text = flag.ToString();
}
else
{
Literal1.Text = "New Password does not match the Confirm Password ";
}
}
以上点击事件一定要修改我的密码,函数passwordChange如下..
public string passwordChange(string username, string password, string newPasswd)
{
string SQLQuery = "SELECT password FROM LoginAccount WHERE username = '" + username + "'";
string SQLQuery1 = "UPDATE LoginAccount SET password = ' " + newPasswd + " ' WHERE username = ' " + username + "'";
SqlCommand command = new SqlCommand(SQLQuery, sqlConnection);
SqlCommand command1 = new SqlCommand(SQLQuery1, sqlConnection);
sqlConnection.Open();
string sqlPassword = "";
SqlDataReader reader;
try
{
reader = command.ExecuteReader();
if (reader.Read())
{
if (!reader.IsDBNull(0))
{
sqlPassword = reader["password"].ToString();
}
}
reader.Close();
if (sqlPassword.ToString() == password.ToString())
{
try
{
int flag = 0;
flag = command1.ExecuteNonQuery();
if (flag > 0)
{
sqlConnection.Close();
return "Password Changed Successfully";
}
else
{
sqlConnection.Close();
return "User Password could not be changed";
}
}
catch (Exception exr)
{
sqlConnection.Close();
return "Password Could Not Be Changed Please Try Again";
}
}
else
{
sqlConnection.Close();
return "User Password does not Match";
}
}
catch (Exception exr)
{
sqlConnection.Close();
return "User's Password already exists";
}
}
我在附近放了一个断点
if(flag>0)
它仍然显示 executeNonquery 没有返回更新的行值,并且还在 SQL 服务器的后端,它没有改变, 请如果有人可以纠正我...我应该使用其他执行命令还是什么? 我正在使用 VS 2008 和 SQL Server 2005 进行此操作..
【问题讨论】:
-
您绝对应该将此查询参数化以避免 SQL 注入。
-
@Martin 那能解决我的问题吗?我的意思是至少这应该可以正常工作?
-
不,这不是您问题的答案,这就是我将其作为评论留下的原因。例如,如果有人输入
'DROP TABLE LoginAccount;--之类的密码,您最终将执行 DROP table 语句。 -
@Martin OMG.. 我不知道.. 我是新手,正在构建一个 Web 应用程序。谢谢你的信息.. :)
标签: c# sql visual-studio-2008 ado.net