A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 张振 于 2013-4-7 00:32 编辑

先上代码,视频案例登陆的最后锁定的解决方案

因为看不到老师最后的演示
而我自己根据老师写的代码在运行一遍发现重置错误次数为0的方法执行不了
因为前面几次错误应该把错误次数修改到了4 每次运行都直接进入锁定状态
除非用户名输入错误才能不进入锁定 所以 重置错误次数为0的想法压根就没实现
也许是有些东西我还没琢磨透 所以请教下 怎么能重置

namespace 登陆练习1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void RaseErrorTimes()
        {
           /** using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\MyDB.mdf;Integrated Security=True;User Instance=True"))
            {
                conn.Open();**/这些是老师给的代码 就不用看了
                using (SqlCommand updateCmd = conn.CreateCommand())
                {
                    updateCmd.CommandText = "update T_Users Set ErrorTimes=ErrorTimes+1 where UserName=@USN";
                    updateCmd.Parameters.Add(new SqlParameter("USN", txtUsername.Text));
                    updateCmd.ExecuteNonQuery();
                }
            }
        }
        private void RasetErrorTimes()
        {
            using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\MyDB.mdf;Integrated Security=True;User Instance=True"))
            {
                conn.Open();
                using (SqlCommand updateCmd = conn.CreateCommand())
                {
                    updateCmd.CommandText = "update T_Users Set ErrorTimes=0 where UserName=@USN";
                    updateCmd.Parameters.Add(new SqlParameter("USN", txtUsername.Text));
                    updateCmd.ExecuteNonQuery();
                }
            }
        }


        private void btn1_Click(object sender, EventArgs e)
        {
            using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\MyDB.mdf;Integrated Security=True;User Instance=True"))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = "select * from T_Users where UserName=@USN";
                    cmd.Parameters.Add(new SqlParameter("USN", txtUsername.Text));
                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        if (reader.Read())
                        {
                            int errortimes = reader.GetInt32(reader.GetOrdinal("ErrorTimes"));
                            if (errortimes > 3)
                            {
                                MessageBox.Show("登陆次数超过三次,被锁定");
                                return;
                            }
                            string dbpassword = reader.GetString(reader.GetOrdinal("PassWord"));
                            if (dbpassword == txtPassword.Text)
                            {
                                MessageBox.Show("登陆成功");
                                RasetErrorTimes();
                                
                            }
                            else
                            {
                                RaseErrorTimes();
                                MessageBox.Show("登录失败");

                            }
                        }
                        else
                        {
                           
                            MessageBox.Show("用户名不存在");
                            return;
                           
                        }
                    }
                }
            }
        }
    }
}

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

3 个回复

倒序浏览
if (errortimes > 3)
{
          MessageBox.Show("登陆次数超过三次,被锁定");
          RasetErrorTimes();//在登陆次数超过三次,被锁定后对数据库中的errortimes 清零操作,也就是在退出程序之前进行处理,保证每次登陆三次锁定功能实现
          return;
}
回复 使用道具 举报
  1. if (errortimes > 3)
  2. {
  3. MessageBox.Show("登陆次数超过三次,被锁定");
  4. return;
  5. }
  6. string dbpassword = reader.GetString(reader.GetOrdinal("PassWord"));
  7. if (dbpassword == txtPassword.Text)
  8. {
  9. MessageBox.Show("登陆成功");
  10. RasetErrorTimes();

  11. }
  12. else
  13. {
  14. RaseErrorTimes();
  15. MessageBox.Show("登录失败");

  16. }
复制代码
在这段代码中,由于先判断错误次数再进行错误次数的重置或增加,所以当你连错4次后Errortimes=4就跳出方法,后续代码不再执行这个用户名被锁定,无法再登陆了;
其实老师说的重置是指连续错误不到4次时,只要登陆成功就把之前记录的错误次数清零


评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
许庭洲 发表于 2013-4-6 18:33
if (errortimes > 3)
{
          MessageBox.Show("登陆次数超过三次,被锁定");

嗯 我试过了 的确可以
不过 为什么 我把 RasetErrorTimes();
放在
  MessageBox.Show("用户名不存在");后面
RasetErrorTimes();
然后我用户名输错 让它清0 再故意密码出错三次 再用户名出错 确不能清零··
还是一直卡在 被锁的状态中  把RasetErrorTimes();这个放在最后的else里面 就不行了 求指教
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马