我想编写一个代码,用户可以在登录后停用其帐户。 在登录页面中,我创建了一个会话,并在停用帐户页面的页面加载方法中获取它。 这是我的删除查询,但是没有使用会话值。
String SQLQuery = "DELETE FROM SignUp Where Password=\'" + txtPassword.Text + "\' AND EmailAddress= \'" + Session["email"]+ "\'";
答案 0 :(得分:1)
您需要确保在使用查询之前设置session["email"]
,而不是 null 并且您在其中获得了值。还可以使用参数来避免SQL injection。您可以阅读此article如何使用参数进行SQL查询。
String SQLQuery = "DELETE FROM SignUp Where Password=\'" + txtPassword.Text + "\' AND EmailAddress= \'" + Session["email"].ToString() + "\'";
答案 1 :(得分:0)
你在会话[“email”]
之后错过了“ToString()”方法 像这样session["email"].ToString()
建议在使用之前检查会话是否可用
if(Session["email"] != null)
{
String SQLQuery = "DELETE FROM SignUp Where Password=\'" + txtPassword.Text + "\' AND EmailAddress= \'" + Session["email"].Tostring() + "\'";
}
else
{
//session timeout
}
还有一件事,你的sql代码会让你暴露在sqlinjection中。 建议您使用Parameterize执行sql查询以避免sql注入。像这样
if(Session["email"] != null)
{
string password = txtPassword.Text;
string email = Session["email"].Tostring();
String SQLQuery = "DELETE FROM SignUp Where Password=@pass AND EmailAddress=@email";
SqlCommand dbComm = new SqlCommand(SQLQuery , new SqlConnection() );
dbComm.Parameters.Add("@pass", SqlDbType.NVarChar).Value = password ;
dbComm.Parameters.Add("@pass", SqlDbType.NVarChar).Value = email ;
//execute sql
}
else
{
//session timeout
}