показать / скрыть метку в соответствии с результатами DataReader? - PullRequest
0 голосов
/ 12 декабря 2010

Я пытаюсь создать веб-форму для входа, что мне нужно, чтобы показать ярлык, если вход в систему не удается, например, «вход не выполнен, попробуйте еще раз», но проблема не работает

вот мойcode:

    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 Ответ

2 голосов
/ 12 декабря 2010

Если результаты не возвращаются из базы данных, тогда ваша ссылка никогда не будет установлена ​​на видимую, потому что 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, так что вы можете просто сделать Select 1 from ... и command.ExecuteScalar() != null Если вы по-прежнему хотите использовать DataReader по другой причине, вам следует использовать блок try {...} finally { dr.close(); }, чтобы гарантировать, что устройство чтения данных не останется открытым при возникновении необработанной ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...