登錄界面的搭建還是比較簡單的,雖然有點簡陋,但能用的姑且當做好的吧,如下圖: 這裡使用的是DevExpress控制項,其中值得一看的就是使用LayoutControl控制項來進行TextEdit控制項的佈局。對於一般幾個TextEdit併排的佈局而言,使用這個控制項的效果還是不錯的。 既然涉及到了系統的登錄 ...
登錄界面的搭建還是比較簡單的,雖然有點簡陋,但能用的姑且當做好的吧,如下圖:
這裡使用的是DevExpress控制項,其中值得一看的就是使用LayoutControl控制項來進行TextEdit控制項的佈局。對於一般幾個TextEdit併排的佈局而言,使用這個控制項的效果還是不錯的。
既然涉及到了系統的登錄,那麼自然少不了資料庫的連接等操作了。這裡,我自己做的時候也很亂,爭取能表述的清楚一些。
首先,如果要訪問資料庫,那沒庫不行哈。那麼,就趕著手頭的東西,趕緊弄個庫出來吧。
資料庫創建與表設計
具體流程就是:創立一個Access2007格式的資料庫文件,這裡名稱為:BoardWages.accdb。別忘了給它創建個密碼,不過具體過程就略了,如果有和我一樣的小白,沒關係,咱稍微搜一下就OK了。然後再創建一個名為tbUser的表,並建立欄位,如下圖所示:
其中,ID欄位為自動編號;Name欄位為文本格式,保存用戶名;Password為文本欄位,保存密碼的MD5散列值。為啥是MD5格式?因為這樣別人即使打開了你的資料庫也無法看到真實的密碼!如果還有人問為啥不能反推,那我也就不能解釋了……
MD5函數
參考代碼:
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怎麼用,我想沒有比秋大的博客更好的地方了,大家可以自行搜索。
需要更多說明的有三個地方:
1、MyAPPConfig.LocalConn 是自己定義的Access的連接字元串,這裡是:Provider=Microsoft.ACE.OLEDB.12.0;Data Source=.\Data\BoardWages.accdb;Persist Security Info=True;Jet OLEDB:Database Password=boardwages!2019
2、CShowMsg.ShowWarning 是自定義的一個輸出方法,其實就是對於 MessageBox.Show方法的一個封裝而已。
3、MyValidator.IsEmpty也是自定義的一個方法,目的是判斷指定的控制項是否內容為空,如果是,會有相應的提示,例如:
這裡涉及到了FluentValidation驗證組件的使用,回頭需要專門的用一章來說明。
小結:好了,下午大概就做了這些內容,最後就是在資料庫中手動添加一條記錄,然後自己在登錄界面中,使用正確的用戶名和密碼進行登錄,看是否能夠登錄成功以驗證我們數據訪問組件使用的是否正確。寫的比較倉促,有問題的地方,大家多多批評指正。