根据DataReader结果显示/隐藏标签?

时间:2010-12-12 19:36:17

标签: c# sql visual-studio-2010

我正在尝试创建一个登录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注入:)

1 个答案:

答案 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(); }块来确保在未处理的错误发生时数据加载器不会保持打开状态。