登陆界面设计之三:界面搭建

  登陆界面的搭建仍是比较简单的,虽然有点简陋,但能用的姑且当作好的吧,以下图:算法

这里使用的是DevExpress控件,其中值得一看的就是使用LayoutControl控件来进行TextEdit控件的布局。对于通常几个TextEdit并排的布局而言,使用这个控件的效果仍是不错的。数据库


  既然涉及到了系统的登陆,那么天然少不了数据库的链接等操做了。这里,我本身作的时候也很乱,争取能表述的清楚一些。ide

首先,若是要访问数据库,那没库不行哈。那么,就赶着手头的东西,赶忙弄个库出来吧。函数

数据库建立与表设计布局

  具体流程就是:创立一个Access2007格式的数据库文件,这里名称为:BoardWages.accdb。别忘了给它建立个密码,不过具体过程就略了,若是有和我同样的小白,不要紧,咱稍微搜一下就OK了。而后再建立一个名为tbUser的表,并创建字段,以下图所示:学习

  其中,ID字段为自动编号;Name字段为文本格式,保存用户名;Password为文本字段,保存密码的MD5散列值。为啥是MD5格式?由于这样别人即便打开了你的数据库也没法看到真实的密码!若是还有人问为啥不能反推,那我也就不能解释了……ui

MD5函数this

  参考代码:编码

 1     /// <summary>
 2     ///  MD5操做类
 3     /// </summary>
 4     public class MD5Hashing
 5     {
 6         /// <summary>
 7         ///  MD5加密算法
 8         /// </summary>
 9         /// <param name="input">要加密的字符串</param>
10         /// <param name="encode">编码类型</param>
11         /// <returns></returns>
12         public static string MD5Encrypt(string input, Encoding encode)
13         {
14             MD5 md5 = new MD5CryptoServiceProvider();
15             byte[] t = md5.ComputeHash(encode.GetBytes(input));
16             StringBuilder sb = new StringBuilder(32);
17             for (int i = 0; i < t.Length; i++)
18             {
19                 sb.Append(t[i].ToString("x").PadLeft(2, '0'));
20             }
21             return sb.ToString();
22         }
23     }

  好了,说完数据库,继续说数据库访问的事。最先,本身学习的时候,学了ODBC,还有OLEDB,再以后的ado.net,直接写SQL代码,对于不少像我这样的小白而言,是很容易出错的,因此,各位大大们,就弄出了不少的ORM组件,解决了小白们的问题。这里,我使用的是秋大的CYQ.Data,由于这个接触的多,用惯了,也确实很好用。仍是老规矩,先把代码贴上再慢慢说:加密

 1             // 使用自定义的方法,利用Validate组件进行验证
 2             // 但要注意的是,须要把控件的tag属性进行设置
 3             if (MyValidator.IsEmpty(txtName,txtPassword) == false)
 4             {
 5                 return;
 6             }
 7 
 8             // 验证没问题以后,获取控件内的用户名和密码
 9             string name = txtName.Text.Trim();          // 用户名
10             string password = txtPassword.Text.Trim();  // 密码
11 
12             // 在数据库中进行查询
13             using (MAction action = new MAction(tbUser, MyAPPConfig.LocalConn))
14             {
15                 if (!action.Exists("Name = '" + name + "'"))        //  是否存在用户名?
16                 {
17                     CShowMsg.ShowWarning(string.Format("用户名'{0}'不存在",name));
18                     return;
19                 }
20                 else
21                 {
22                     // 对密码进行MD5加密,再进行判断
23                     string md5Password = MD5Hashing.MD5Encrypt(password, Encoding.UTF8);
24                     string where = string.Format("Name = '{0}' and Password = '{1}'",name,md5Password);
25                     if (!action.Exists(where))
26                     {
27                         CShowMsg.ShowWarning("用户名或者密码不正确!");
28                         return;
29                     }
30                     else
31                     {
32                         // 这一句,就能够关闭当前的页面了。由于在Program中进行了处理。
33                         this.DialogResult = System.Windows.Forms.DialogResult.OK;
34                     }
35                 }
36             }

  注意了,包含在using中的代码就是使用CYQ.Data的具体代码了,这里先查看是否存在用户名,再查看是否存在用户名和密码都存在的记录。代码是下午写的,如今感受,这里重复了,直接进行第二组判断应该就能够了。其中,把判断条件添加进去,这里我使用的是string.Format方法来组成了字符串来当作查询条件。具体的CYQ.Data怎么用,我想没有比秋大的博客更好的地方了,你们能够自行搜索。

  须要更多说明的有三个地方:

一、MyAPPConfig.LocalConn 是本身定义的Access的链接字符串,这里是:Provider=Microsoft.ACE.OLEDB.12.0;Data Source=.\Data\BoardWages.accdb;Persist Security Info=True;Jet OLEDB:Database Password=boardwages!2019
二、CShowMsg.ShowWarning 是自定义的一个输出方法,其实就是对于 MessageBox.Show方法的一个封装而已。
三、MyValidator.IsEmpty也是自定义的一个方法,目的是判断指定的控件是否内容为空,若是是,会有相应的提示,例如:

 


这里涉及到了FluentValidation验证组件的使用,回头须要专门的用一章来讲明。

 小结:好了,下午大概就作了这些内容,最后就是在数据库中手动添加一条记录,而后本身在登陆界面中,使用正确的用户名和密码进行登陆,看是否可以登陆成功以验证咱们数据访问组件使用的是否正确。写的比较仓促,有问题的地方,你们多多批评指正。

相关文章
相关标签/搜索