我想手动更改密码并向我的用户发送密码,但我得到了“对象引用没有设置为对象的实例”。错误。我的鳕鱼出了什么问题: 谢谢你:
Random r = new Random();
string code = r.Next(100000, 9999999).ToString();
//////////////////////////////////////////////////////////////////////////////////////////////
string connStr = ConfigurationManager.ConnectionStrings["****"].ConnectionString;
SqlConnection sqlconn = new SqlConnection(connStr);
SqlCommand sqlcmd = new SqlCommand();
sqlcmd = new SqlCommand("SELECT Count(ID) FROM RolInfo where username=@username", sqlconn);
sqlcmd.Parameters.AddWithValue("@username", TextBox1.Text);
sqlconn.Open();
int count = ((int)sqlcmd.ExecuteScalar());
sqlconn.Close();
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if (count != 0)
{
Sendmail();
MembershipUser u = Membership.GetUser();
u.ChangePassword(u.ResetPassword(), code);
}
else
{
lab_Message.Visible = true;
lab_Message.Text = "This username is invalid.";
lab_Message.ForeColor = System.Drawing.Color.Red;
}
}
else
{
lab_Message.Visible = true;
lab_Message.Text = "Please enter your username.";
lab_Message.ForeColor = System.Drawing.Color.Red;
}
}
答案 0 :(得分:0)
你没有将参数传递给Membership.GetUser();
Membership.GetUser();
获取当前登录的用户。由于您尚未登录,因此会返回null
。如果您已登录,则只返回您,而不是您的成员。
如果您想要获得该用户,则需要传递他们的username
。像这样:
MembershipUser u = Membership.GetUser(TextBox1.Text);
<强>更新强>
您无需调用SQL数据库来检查用户是否存在。
你可以这样做。
MembershipUser u = Membership.GetUser(TextBox1.Text);
if (u != null){
SendMail();
u.ChangePassword(u.ResetPassword(), code);
}else{
lab_Message.Visible = true;
lab_Message.Text = "This username is invalid.";
lab_Message.ForeColor = System.Drawing.Color.Red;
}
顺便说一句,用户密码不会设置为code
- 这将设置为用户对其安全问题的回答。 ResetPassword
将密码重置为自动生成的密码。
请参阅此处获取文档。 http://msdn.microsoft.com/en-us/library/system.web.security.membershipuser.resetpassword.aspx