C # Форма входа с аутентификацией пользователя с базой данных SQL Server - PullRequest
0 голосов
/ 01 октября 2019

Я новичок в SQL Server и C #. Я работаю над формой входа, которая проверяет, является ли пользователь администратором или обычным пользователем. В моем SQL Server я создал таблицу, в которой хранятся имя пользователя, пароль и роль (администратор или обычный пользователь). Сохраненные данные:

  • Для администратора: имя пользователя = admin, пароль = admin, роль = admin
  • Для основного пользователя: имя пользователя = пользователь, пароль = пользователь, роль =user

Если пользователь вводит имя пользователя и пароль «admin», он должен быть направлен на страницу администратора, иначе это будет страница пользователя.

Это мой код:

string query = "SELECT * from tbl_login WHERE Username = @username and password=@password";

con.Open();

SqlCommand sqlcmd = new SqlCommand(query, con);
sqlcmd.Parameters.AddWithValue("@username", tbusername.Text);
sqlcmd.Parameters.AddWithValue("@password", tbpswlog.Text);
DataTable dtbl = new DataTable();

SqlDataAdapter sqlsda = new SqlDataAdapter(sqlcmd);
sqlsda.Fill(dtbl);

con.Close();

if (dtbl.Rows.Count == 1)
{
    this.Hide();

    if (tbusername.Equals("admin"))
    {
        MessageBox.Show("You are logged in as an Admin");
        AdminHome fr1 = new AdminHome();
        fr1.Show();
        this.Hide();
    }
    else
    {
        MessageBox.Show("You are logged in as a User");
        UserHome fr2 = new UserHome();
        fr2.Show();
        this.Hide();
    }
}
else
{
    MessageBox.Show("Incorrect username or password");
}

Я знаю, что этот код отсутствует и неправильный.

РЕДАКТИРОВАТЬ:

Я пробовал этот код ниже

if (dtbl.Rows.Count == 1)
{
    this.Hide();

    if (dtbl.Rows[0]["role"].ToString().Equals("admin"))
    {
        MessageBox.Show("You are logged in as an Admin");
        AdminHome fr1 = new AdminHome();
        fr1.Show();
        this.Hide();
    }
    else
    {
        MessageBox.Show("You are logged in as a User");
        UserHome fr2 = new UserHome();
        fr2.Show();
        this.Hide();
    }
}
else
{
    MessageBox.Show("Incorrect username or password");
}

Но даже если я введу имя пользователя admin и пароль admin, оно будет означать «Вы вошли как пользователь».

Ответы [ 2 ]

1 голос
/ 02 октября 2019

Вам нужно только получить значение роли. Не извлекайте ненужные данные. Проверьте имя столбца в базе данных и при необходимости исправьте.

Сохраняйте свои объекты базы данных локальными, чтобы вы могли быть уверены, что они закрыты и удалены. using блокирует это, даже если есть ошибка.

Вам не нужен DataTable или DataAdapter. Использование .ExecuteScalar вернет первый столбец первой строки набора результатов, который именно то, что вы хотите знать. Роль.

    private void ValidateUser()
    {
        string query = "SELECT role from tbl_login WHERE Username = @username and password=@password";
        string returnValue = "";
        using (SqlConnection con = new SqlConnection("YourConnectionString"))
        {
            using (SqlCommand sqlcmd = new SqlCommand(query, con))
            {
                sqlcmd.Parameters.Add("@username", SqlDbType.VarChar).Value = tbusername.Text;
                sqlcmd.Parameters.Add("@password", SqlDbType.VarChar).Value = tbpswlog.Text;
                con.Open();
                returnValue = (string)sqlcmd.ExecuteScalar();
            }
        }
//EDIT to avoid NRE 
        if (String.IsNullOrEmpty(returnValue))
        {
            MessageBox.Show("Incorrect username or password");
            return;
        }
        returnValue = returnValue.Trim();
        if (returnValue == "Admin")
        {
            MessageBox.Show("You are logged in as an Admin");
            AdminHome fr1 = new AdminHome();
            fr1.Show();
            this.Hide();
        }
        else if (returnValue == "User")
        {
            MessageBox.Show("You are logged in as a User");
            UserHome fr2 = new UserHome();
            fr2.Show();
            this.Hide();
        }
    }
0 голосов
/ 01 октября 2019

Читая комментарий, вам нужно следующее в операторе if вместо того, что вы написали.

if (tbusername.Text == "admin")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...