/// <summary>
 /// Constructor
 /// </summary>
 public PersonAccess()
 {
     myDBManager = new DBManager();
 }
        /// <summary>
        /// Validate login of a user
        /// <param name="username">User Name of the person</param>
        /// <param name="password">Password of the person</param>
        /// </summary>
        public override bool ValidateUser(string username, string password)
        {
            bool ok = false;

            DBManager dbmanager = new DBManager();

            int pk_person = -1;

            string query = "SELECT pk_person FROM Person WHERE Person.login = @login AND Person.password = HASHBYTES('MD5', @pass)";

            SqlConnection connection = dbmanager.newConnection();
            connection.Open();

            SqlTransaction transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted, "Login");

            List<SqlParameter> param = new List<SqlParameter>();
            SqlParameter loginParam = new SqlParameter("@login", username);
            loginParam.SqlDbType = SqlDbType.VarChar;
            SqlParameter passParam = new SqlParameter("@pass", password);
            passParam.SqlDbType = SqlDbType.VarChar;

            param.Add(loginParam);
            param.Add(passParam);

            object o = dbmanager.doSelectScalar(query, connection, transaction, param);

            connection.Close();

            if (o != null && !DBNull.Value.Equals(o))
            {
                pk_person = (int)o;
            }

            if (pk_person != -1)
            {
                ok = true;

                int roleID = -1;

                string query_role = "SELECT role FROM Person WHERE pk_person = @pk_person;";

                SqlConnection connection_role = dbmanager.newConnection();
                connection_role.Open();

                SqlTransaction transaction_role = connection_role.BeginTransaction(IsolationLevel.ReadCommitted, "getTypePerson");

                Dictionary<string, object> param_role = new Dictionary<string, object>();
                param_role.Add("@pk_person", pk_person);

                object o_role = dbmanager.doSelectScalar(query_role, connection_role, transaction_role, param_role);

                connection_role.Close();

                if (!DBNull.Value.Equals(o_role) && o_role != null)
                {
                    roleID = (int)o_role;
                }
                else
                {
                    ok = false;
                }

                // add user in role if not in
                if (roleID == 1)
                {
                    if (!Roles.RoleExists("student"))
                    {
                        Roles.CreateRole("student");
                    }

                    if(!Roles.IsUserInRole(username, "student"))
                    {
                        Roles.AddUserToRole(username, "student");
                    }
                }
                else
                {
                    if (!Roles.RoleExists("professor"))
                    {
                        Roles.CreateRole("professor");
                    }
                    if (!Roles.IsUserInRole(username, "professor"))
                    {
                        Roles.AddUserToRole(username, "professor");
                    }
                }

                user = new MemberShipPIUser(pk_person, username, true);
            }

            return ok;
        }
 /// <summary>
 /// Constructor
 /// </summary>
 public TechnologyAccess()
 {
     myDBManager = new DBManager();
 }