首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

c#制作的口令登陆界面 如何实现只给三次机会

2013-04-02 
c#制作的口令登陆界面 怎么实现只给三次机会Password frmPassword new Password()DialogResult dr fr

c#制作的口令登陆界面 怎么实现只给三次机会
Password frmPassword = new Password();
            DialogResult dr = frmPassword.ShowDialog();
            if (dr == DialogResult.Cancel)
                Application.Exit();
            else
            {
                SqlConnection oledbConn = new SqlConnection();//连接数据库
                oledbConn.ConnectionString = @"Data Source=O8RS63RAGSIE4AR;Initial Catalog=hrone;Integrated Security=True";
                oledbConn.Open();//打开数据库连接
                SqlCommand oledbCmd = new SqlCommand();
                oledbCmd.Connection = oledbConn;
                oledbCmd.CommandText = @"SELECT 0 FROM test WHERE username = @u1;
                    SELECT 0 FROM test WHERE username = @u2 AND password = @p1; SELECT isnull(lockcnt, 0) lockcnt FROM test WHERE username = @u3 AND password = @p2 AND isnull(lockcnt, 0) < 3";
                oledbCmd.Parameters.Clear();//
                SetParam(oledbCmd, "@u1", frmPassword.TxtUserName.Text);
                SetParam(oledbCmd, "@u2", frmPassword.TxtUserName.Text);
                SetParam(oledbCmd, "@p1", frmPassword.TxtPassword.Text);
                SetParam(oledbCmd, "@u3", frmPassword.TxtUserName.Text);
                SetParam(oledbCmd, "@p2", frmPassword.TxtPassword.Text);


                SqlDataReader oledbReader = oledbCmd.ExecuteReader();//从数据库读取行
              
                
                    if (oledbReader.HasRows)//判断数据集是否为空
                    {
                        oledbReader.NextResult();
                        if (oledbReader.HasRows)


                        {
                            oledbReader.NextResult();
                            if (oledbReader.HasRows)
                            {
                                
                                Application.Run(new MainForm());
                            }
                            else
                            
                                MessageBox.Show("对不起,您的账号已被锁定,请与管理人员联系");
                              
                         
                        }
                        else
                            MessageBox.Show("请输入正确的口令");
                                               }
                    else
                            MessageBox.Show("用户账号不存在");
                                     
            }
        }

        static void SetParam(SqlCommand cmd, string pn, object val)
        {
            SqlParameter param = new SqlParameter();


            param.ParameterName = pn;
            param.Value = val;
            cmd.Parameters.Add(param);
        }
[解决办法]
楼上的存在一个问题,就是用户输错三次后,关闭画面,再次打开尝试密码。。。
要从根本上解决问题,就是要在用户表中加两个字段来保存用户的信息:
1.是否锁定 INT
3.错误次数 INT
用户登录逻辑:
if 已锁定,直接返回;
else if 输错密码,判断次数,到达3次就锁定;
else 返回成功;
当然,还要加一些解锁功能了。。
再复杂一点,可以设定暂时锁定和永久锁定,如10分钟内错误3次会暂时锁定,持续30分钟后解锁;24小时内如果累计超过10次,则永久锁定。这样的话,需要再加几个记录错误时间和监控起始时间。

热点排行