(6)C# 之 ADO.NET 登陆框详解

几乎学习到任何一种编程语言,登陆框案列都是必不可少的,那么今天我也来写一篇登陆框案例详解。

 
①首先是建立数据库表,如下图
◇说明: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             }

 

◇说明:这里介绍一个防御性编程。
          例如:我们输入的用户名和密码长度是不可能小于零的,但是为了防止一些其他情况的发生,我们还是在写判断语句的时候把小于零的情况给带上。还有就是,我们查询出的用户名个数也是不可能小于零的,但是我们也把小于零给带上。这就是防御性编程。考虑更多的情况发生。
 
◇其他情况在代码的注释中都说的很详细了,共勉之。
 
posted @ 2015-10-22 15:33  考拉爱喵喵  阅读(715)  评论(0编辑  收藏  举报