имя пользователя и пароль всегда неверны, даже если они верны в базе данных - PullRequest
0 голосов
/ 08 января 2012

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

Это мой код:

con = new SqlConnection("Data Source=MICROSOF-58B8A5\\SQL_SERVER_R2;Initial Catalog=Daniel;Integrated Security=True");
string query = "SELECT Username, Password FROM Users WHERE Username='" + Username + "' AND Password='" + Password + "'";
con.Open();
DataSet ds = new DataSet();
SqlDataAdapter adap = new SqlDataAdapter(query, con);
adap.Fill(ds);
int count = ds.Tables[0].Rows.Count;
if (count == 0)
{
    ErrorMessege.Text = "Username or Password was Incorrect!";
}
else
{
    Session["Session"] = UsernameLogin.Text;
    Response.Redirect("MenuHome.aspx");
}
con.Close();

Спасибо за помощников!

Ответы [ 5 ]

2 голосов
/ 08 января 2012

Ваш код выглядит так, как будто он должен работать. Вы прошли через это и добавили часы на DS, чтобы увидеть, какие значения он имеет? Я выполнил код на моей машине для одной из моих тестовых БД, и он работал нормально.

Я бы, однако, предложил что-то похожее на это, так как это, на мой взгляд, намного чище:

using(SqlConnection con = new SqlConnection("Data Source=MICROSOF-58B8A5\\SQL_SERVER_R2;Initial Catalog=Daniel;Integrated Security=True"))
{
    string query = "SELECT TOP 1 Username FROM Users WHERE Username=@UserName AND Password=@Password";

    using (SqlCommand command = new SqlCommand(query, con))
    {
        command.Parameters.AddWithValue("@UserName", UserName);
        command.Parameters.AddWithValue("@Password", Password);
        con.Open();
        string username = (string)command.ExecuteScalar(); //Add Null Check
        // Do stuff if username exists         
    }
}

Вы всегда должны добавлять оператор using для объекта, который реализует IDisposable. (SqlConnection, SqlCommand) Также, чтобы предотвратить SqlInjection и подобные, используйте параметризованные запросы.

0 голосов
/ 08 января 2012

Несколько вещей для проверки:

  1. регистр (верхний / нижний) значения имени пользователя / пароля, которое вы отправляете; вероятно, из-за нечувствительности к регистру ничего не соответствует.

  2. Вы храните пароль в текстовом формате ... обычно пароль хранится в зашифрованном виде ... Поэтому я бы предложил вам искать имя пользователя только как

    ВЫБЕРИТЕ имя пользователя, пароль от пользователей, ГДЕ ниже (имя пользователя) = «имя пользователя»;

0 голосов
/ 08 января 2012

Вы пытались ответить. Напишите строку запроса и вставьте результат в новый запрос в проводнике баз данных?Вы можете быть удивлены:)

0 голосов
/ 08 января 2012

Убедитесь, что при проверке имени пользователя и пароля не учитывается регистр, или проверьте правильность регистра. Если БД использует сортировку с учетом регистра, она может не вернуть того, что вы ожидали.

0 голосов
/ 08 января 2012

Самый простой способ проверить пароли - просто создать SqlDataReader, созданный из

SqlCommand sqlCommand = new SqlCommand(queryString, connection);
var reader = sqlCommand.ExecuteDataReader();
if(reader.Read()){
 //you got a correct password, read fields from reader
   string username = reader[0];
}

ExecuteReader SqlDataReader

...