Как я могу получить определенные данные из sql в c #?

#c# #mysql #sql #visual-studio

#c# #mysql #sql #visual-studio

Вопрос:

У меня есть база данных со следующей таблицей:

таблица пользователей

Я пытаюсь получить роль текущего имени пользователя, чтобы я мог перенаправить этого человека на нужную страницу. Я попробовал это с помощью предложения if (acc.u_role == 1), но, к сожалению, это не работает.

     public ActionResult Verify(User acc)
    {
        connectionString();
        con.Open();
        com.Connection = con;
        com.CommandText = "select * from Users where u_username = '" acc.u_username "' and u_password ='" acc.u_password "'";

        dr = com.ExecuteReader();
        if (dr.Read())
        {
            if (acc.u_role == 1) { 
                con.Close();
                return View("AdminHome");
            }
            else
            {
                con.Close();
                return View("UserHome");
            }
        }
        else
        {
            con.Close();
            return View("Error");
        }
    } 
  

Комментарии:

1. Во-первых, из базы данных в другую, вы не можете гарантировать, что ваш идентификатор роли будет равен 1. Вместо этого я бы просто вернул имя роли, связанной с этим пользователем, чтобы вы знали роль навсегда и основывали на ней свое перенаправление.

2. 3 кратких совета: 1: параметризуйте свой sql, 2: connectionString() это не подходящее название метода, используйте глаголы и описательные имена. 3: узнайте о try / catch / finally.

Ответ №1:

Где вы устанавливаете acc.u_role?

Похоже, что вы читаете данные, а затем не используете их. dr[5] должен содержать роль из базы данных

         dr = com.ExecuteReader();
        if (dr.Read())
        { 

            if (dr[5] == 1) { 
                con.Close();
                return View("AdminHome");
            }
  

Ответ №2:

Я уже нашел решение для своего ответа, вот оно:

  if (dr.Read())
            {
                if (Convert.ToInt32(dr["u_role"]) == 1) {
                    con.Close();
                    return View("AdminHome");
                }
                else
                {
                    con.Close();
                    return View("UserHome");
                }
            }
            else
            {
                con.Close();
                return View("Error");
            }
  

Комментарии:

1. То, что вы, вероятно, хотите использовать, — это ExecuteScalar(). Вам нужно только одно возвращаемое значение — u_role определенного пользователя. Извлечение слишком большого количества данных для последующей фильтрации в программе является очень распространенной ошибкой. Это прямо там, где не используются параметризованные запросы в ошибках, которых следует избегать.