我正在尝试创建一个登录Web表单,如果登录失败就需要显示标签,如“登录失败,再试一次”,但问题不起作用
这是我的代码:
SqlCommand selectuser = new SqlCommand("select username,password from users where username = '" + TextBox1.Text + "' and password = '" + TextBox2.Text + "'", badersql);
badersql.Open();
SqlDataReader dr = selectuser.ExecuteReader();
while (dr.Read())
{
if (dr["username"].ToString() == TextBox1.Text && dr["password"].ToString() == TextBox2.Text)
{
}
else
{
Label1.Visible = true;
}
}
dr.Close();
请注意:我知道没有参数化的SQL在代码中,因为我不需要使用它们,所有的网页都是100%本地所以请帮我解决问题并留下sql注入:)
答案 0 :(得分:2)
如果没有从数据库返回任何结果,那么您的链接永远不会设置为可见,因为dr.Read()将返回false。现在发生了什么事。
您需要做什么,因为我相信您的查询将始终只返回一个结果
SqlCommand selectuser = new SqlCommand("select username,password from users where username = '" + TextBox1.Text + "' and password = '" + TextBox2.Text + "'", badersql);
SqlDataReader dr = null;
try
{
dr = selectuser.ExecuteReader();
Label1.Visible = !dr.Read();
}
finally
{
if (dr != null)
dr.Close();
}
你应该完成。
现在有一些提示,你已经在sql server中进行过滤了,所以你可以Select 1 from ...
做command.ExecuteScalar() != null
如果由于其他原因仍想使用DataReader,则应使用try {...} finally { dr.close(); }
块来确保在未处理的错误发生时数据加载器不会保持打开状态。