Как перенаправить на страницу на основе значения в столбце БД
у меня есть страница, где два разных отдела будут входить в систему под названием 1.отходы и 2.окружающая среда. я хочу, чтобы страница перенаправлялась на определенную страницу, если отдел пользователей-это отходы, а также на другую страницу, если отдел пользователей-это среда. в моей регистрационной таблице есть столбцы имя, фамилия , адрес электронной почты , пароль и отдел
если отдел = отходы
Перенаправление на страницу 1 else
если отдел = окружающая среда
Перенаправление на страницу 2
я получаю сообщение об ошибке "исключение типа 'System.IndexOutOfRangeException' произошло в System.Data.dll но не был обработан в пользовательском коде"
Не знаю, как реализовать это в следующем коде:
Что я уже пробовал:
Код
Что я уже пробовал:
SqlConnection con = new SqlConnection(strConnString); SqlCommand cmd = new SqlCommand("select * from [dbo].[PB_Register] where pb_Email= @Login_Email and pb_Password=@Login_Password", con); cmd.Parameters.AddWithValue("@Login_Email",Login_Email.Text); cmd.Parameters.AddWithValue("@Login_Password", Login_Password.Text); Session["Username"] = Login_Email.Text; con.Open(); SqlDataReader rd = cmd.ExecuteReader(); if (rd.HasRows) { rd.Read(); if (rd["Departmet"].ToString() == "EPIP") Response.Redirect("UPLOAD.aspx"); else if (rd["Departmet"].ToString() == "Waste") Response.Redirect("EMAIL_FILE.aspx"); } else { ClientScript.RegisterStartupScript(GetType(), "alert", "alert('Username or Password incorrect');", true); } }
ZurdoDev
Шаг 1-это понять, что делает ваш код. Тогда делать то, что вы хотите сделать, очень легко.
Отдел пишется неправильно, поэтому он не может найти его в rd.
Member 14183767
это все еще дает мне ту же ошибку , это моя страница входа в систему, я хотел бы, чтобы код проверял, какой отдел находится в PB_Register для каждого пользователя и перенаправлял на соответствующую страницу
ZurdoDev
Опять же, вам нужно сначала узнать, что делает код.
Вызов rd = cmd.ExecuteReader() выполнит инструкцию sql, которая у вас есть. Если вы хотите получить доступ к столбцу в результате, то вы можете сделать это с помощью rd["columnName"].Метод toString().
Member 14183767
теперь я понимаю, что он делает, спасибо за это! но проблема в том, что даже когда я использовал решение ur, я все равно получаю ошибку, которая сбивает меня с толку, plz help я все еще учусь
ZurdoDev
Значит, вы набрали что-то не то. Каково имя столбца в таблице PB_Register, который вы хотите проверить?
Member 14183767
Отдел
ZurdoDev
Вы неправильно написали его в приведенном выше коде. Итак, исправьте это, и если вы получите ошибку, то скажите нам, какая строка кода вызвала ошибку и в чем она заключается.
Member 14183767
я исправил, что он выдает ошибку на этом коде : if(rd["Departmet"].ToString() == "EPIP")
ZurdoDev
и в чем же ошибка?
Member 14183767
- Исключение типа "система".IndexOutOfRangeException' произошло в System.Data.dll но не был обработан в пользовательском коде" дополнительная информация 'Department'
ZurdoDev
IndexOutOfRangeException, это означает, что столбец, на который вы ссылаетесь по индексу (rd["Department"]), не существует.
Откройте Sql Server Management Studio и запустите
выберите * из [dbo].[PB_Register]
Member 14183767
он существует я только что проверил
ZurdoDev
Тогда ваш код указывает на другую базу данных или вы все еще набрали его неправильно. Ошибки не лгут.
Что-то не так, и я не вижу, что вы делаете, поэтому вам придется найти это.
Richard Deeming
Вы храните пароли в виде обычного текста. Не делай этого!
Безопасная Аутентификация Паролем Объясняется Просто[^]
Соленое хэширование паролей - делаем это правильно[^]
Richard Deeming
И почему вы заново изобретаете колесо? ASP.NET имеет несколько совершенно хороших встроенных систем аутентификации - например, Личность ASP.NET [^]