几乎学习到任何一种编程语言,登陆框案列都是必不可少的,那么今天我也来写一篇登陆框案例详解。
①首先是建立数据库表,如下图
◇说明:errortimes这个字段,主要作用在于每次用户输入错误之后,errortimes就会自增1,当errortimes达到3的时候,该账户就会被锁定。如果用户在errortimes达到3之前成功登陆了,那么errortimes值就会清。
②然后新建一个WPF窗口,如下图
③双击“登陆按钮”,开始写代码,具体代码如下:
1 if (username.Text.Length <= 0) 2 { 3 MessageBox.Show("请输入用户名"); 4 return; 5 } //判断是否有输入用户名 6 if (password.Text.Length <= 0) 7 { 8 MessageBox.Show("请输入密码"); 9 return; 10 } //判断是否有输入密码 11 DataTable dt = SqlHelper.ExecuteDataTable("select * from T_User where username = @username",new SqlParameter ("@username",username.Text)); 12 //更具用户名来获得查询结果 13 if (dt.Rows.Count <= 0) 14 { 15 MessageBox.Show("用户名错误"); 16 return; 17 } //找不到用户名的情况 18 int errortimes = (int)SqlHelper.ExecuteScalar("select errortimes from T_User where username=@username",new SqlParameter("@username", username.Text)); //获得该用户名的错误次数 19 if (errortimes >= 3) 20 { 21 MessageBox.Show("错误次数大于三次,账号已锁定"); 22 return; 23 } 24 if (dt.Rows.Count > 1) 25 { 26 MessageBox.Show("用户名重复"); 27 return; 28 } 29 else 30 { 31 DataRow dr = dt.Rows[0]; 32 string pwd = (string)dr["password"]; 33 if (pwd != password.Text) 34 { 35 MessageBox.Show("密码错误"); 36 SqlHelper.ExecuteNonQuery("update T_User set errortimes = errortimes+1 where username = @username",new SqlParameter("@username", username.Text)); 37 //每次输入密码错误,errortimes就自增1 38 return; 39 } 40 else 41 { 42 MessageBox.Show("恭喜你,登陆成功"); 43 SqlHelper.ExecuteNonQuery("update T_User set errortimes = 0 where username= @username",new SqlParameter("@username",username.Text)); 44 return; 45 } 46 47 }
◇说明:这里介绍一个防御性编程。
例如:我们输入的用户名和密码长度是不可能小于零的,但是为了防止一些其他情况的发生,我们还是在写判断语句的时候把小于零的情况给带上。还有就是,我们查询出的用户名个数也是不可能小于零的,但是我们也把小于零给带上。这就是防御性编程。考虑更多的情况发生。
◇其他情况在代码的注释中都说的很详细了,共勉之。