Я пытаюсь получить роль пользователя на выбранном SQL сервере для блокировки некоторых страниц в зависимости от значения сеанса. Но на самом деле я получаю нулевое значение. Чтобы получить роль, у меня есть хранимая процедура с выходным параметром.
CREATE PROCEDURE obtenerROl
@user varchar(20),
@passwrd varchar(20),
@rol tinyint OUTPUT
AS
BEGIN
SELECT @rol = idROl
FROM Users
WHERE nameUSer = @user AND password = @passwrd
RETURN @rol
END
На странице login.aspx.cs
я пытаюсь получить значение для выходного параметра и поместить его в переменную сеанса.
public void obtenerRol()
{
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["connDb"].ConnectionString))
{
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "obtenerROl";
cmd.Parameters.Add("@user", SqlDbType.VarChar).Value = txtUsuario.Text.Trim();
cmd.Parameters.Add("@passwrd ", SqlDbType.VarChar).Value = txtContraseña.Text.Trim();
SqlParameter rol = new SqlParameter("@rol", SqlDbType.TinyInt);
rol.Direction = ParameterDirection.Output;
cmd.Parameters.Add(rol);
cmd.Connection = conn;
cmd.ExecuteReader(CommandBehavior.CloseConnection);
conn.Open();
Session["UserRole"] = cmd.Parameters["@rol"].Value.ToString();
}
}
После входа в систему на главной странице у меня есть ярлык только для проверки значения сеанса.
mensajeID.Text = Session["UserRole"].ToString();
Но я получаю сообщение об ошибке в этой строке:
System.Web.SessionState.HttpSessionState.this [string] .get вернул null.
Итак, я предполагаю, что метод не работает.
последняя добавленная мной строка была
cmd.ExecuteReader(CommandBehavior.CloseConnection);
, потому что я прочитал, что необходимо закрыть загрузчик данных для обработки выходных параметров, но это не сработало. Надеюсь, вы поможете мне с моей проблемой, привет.