优化程序该注意的

本文介绍了一种用户登录验证及信息转换的方法。通过数据库查询用户名对应的详细信息,并将其从DataRow对象转换为实体对象,同时实现用户登录验证,确保用户具有管理员权限且密码正确。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

逻辑层中的代码:

        /// <summary>
        /// 将包含用户数据的DataRow转换成实体类
        /// </summary>
        /// <param name="row">包含用户数据的DataRow</param>
        /// <returns>包含用户数据的DataRow对应的实体类</returns>
        private static UserInfo ChangeToEntity(DataRow row)
        {
            UserInfo info = new UserInfo();
            info.UserId = int.Parse(row["UserId"].ToString());
            info.IsAdmin = bool.Parse(row["IsAdmin"].ToString());
            info.UserName = row["UserName"].ToString();
            info.Passwords = row["Passwords"].ToString();
            info.RealName = row["RealName"].ToString();
            info.PasswordAnswer = row["PasswordAnswer"].ToString();
            info.PasswordQuestion = row["PasswordQuestion"].ToString();
            if (row["Birthday"].ToString() != "")
            {
                info.Birthday = DateTime.Parse(row["Birthday"].ToString());
            }
            info.UserStatus =(UserStatus)(byte.Parse(row["UserStatus"].ToString()));
            info.Email = row["Email"].ToString();
            info.RegDate = DateTime.Parse(row["RegDate"].ToString());
            info.LoginCount = int.Parse(row["LoginCount"].ToString());
            info.LastLoginDate = DateTime.Parse(row["LastLoginDate"].ToString());
            return info;
        }

 

        /// <summary>
        /// 查询用户信息实体
        /// </summary>
        /// <param name="userName">用户名</param>
        /// <returns>返回用户信息实体</returns>
        public static UserInfo GetUserEntity(string userName)
        {
            DataTable data = instance.GetUserInfo(userName);
            if (data.Rows.Count > 0)
            {
                return ChangeToEntity(data.Rows[0]);
            }
            else
            {
                return null;
            }
        }

        /// <summary>
        /// 用户登录管理后台
        /// </summary>
        /// <param name="userName">用户名</param>
        /// <param name="password">密码</param>
        /// <param name="simpleUserInfo">在会话中保存的用户信息实体</param>
        /// <returns>返回是否成功登录</returns>
        public static bool AdminLogin(string userName, string password, out SimpleUserInfo simpleUserInfo)
        {
            UserInfo info = GetUserEntity(userName);
            password = MD5Provider.Hash(password);
            simpleUserInfo = null;
            /*登录管理后台成功必须满足以下条件:
             * 1、数据库中存在指定的用户名
             * 2、指定用户名的密码和登录密码一致
             * 3、用户不是处于被禁止登录状态
             * 4、用户具有管理后台权限
             */
            if (info == null || info.UserStatus == UserStatus.Forbidden
                || info.Passwords != password||!info.IsAdmin)
            {
                return false;
            }
            else
            {
                simpleUserInfo = new SimpleUserInfo();
                simpleUserInfo.UserId = info.UserId;
                simpleUserInfo.UserName = info.UserName;
                simpleUserInfo.RealName = info.RealName;
                simpleUserInfo.IsAdmin = info.IsAdmin;
                //当登录成功之后更新用户的最后登录信息
                instance.UpdateLoginStatus(info.UserId);
                return true;
            }
        }

 

数据层的代码:

        /// <summary>
        /// 用户用户名获取用户信息
        /// </summary>
        /// <param name="userName">用户名</param>
        /// <returns></returns>
        public DataTable GetUserInfo(string userName)
        {
            StringBuilder buffer = new StringBuilder();
            buffer.Append("select * from Users ");
            buffer.Append(" where UserName=@UserName");
            SqlParameter[] parameters = {
                    new SqlParameter("@UserName", SqlDbType.VarChar,20)};
            parameters[0].Value = userName;

            SqlDbHelper db = new SqlDbHelper();
            return db.ExecuteDataTable(buffer.ToString(), CommandType.Text, parameters);
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值