首先,向大家通知一個好消息——我的三層終於實現了!!!這兩天,一直在調一個bug一直鏈接不上數據庫,弄得我死的心都有了。就在昨天,當我把一個“,”改成了“;”後,一切都變的那麼的美好。我瞬間感覺,這個世界依舊是彩色的。依然是那麼的簡單,那麼的明亮。
現在,我把我的c#版的三層實現的過程給大家分享下,希望大家可以多多指點。
在這裡,我設計了一個簡單的界面,兩個標簽,兩個文本框,一個按鈕。從屬性窗口中將文本框的按鈕命名為txtUserName和txtPassword(匈牙利命名法,不知道的童鞋可以去查一下哦。)然後將按鈕的Name屬性改為btnLogin。設計完成後,代碼如下:
namespace UI { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) {
//定義一個string類型的用戶名,用於存放用戶輸入的用戶名
string userName = txtUsername.Text.Trim();
//定義一個string類型的密碼,用於存放用戶輸入的密碼
string password = txtpassword.Text.Trim();
//將得到的數據傳入B層。具體方法是:首先,引用B層,然後定義一個引用B層定義的類的實體MGR。
Login.Bll.LoginService MGR = new Login.Bll.LoginService();
//應用MGR的userlogin方法(該方法在B層的類中定義,而且該方法需要傳入數據userName和Password),得到一個UserInfo類型的返回值(UserInfo的類型在實體層的,實體層不屬於三層它定義一些數據類型,用於引用)。
Login.Model.UserInfo user = MGR.userlogin(userName, password);
//登陸成功後的一個提示MessageBox.Show(登陸成功 + user.userName); } }}
在這個窗體中,並沒有任何的數據判斷,只是把該顯示給用戶的界面向用戶展示,然後接受用戶的輸入,對用戶的操作進行采集。
B層的職責就是對數據進行邏輯的運算。登陸中只有一個判斷,所以B曾的代碼也不多。
namespace Login.Bll {
//定義loginservice類 public class LoginService {
//定義loginservice類的userlogin方法,該方法返回UserInfo類型的數據 public Login.Model .UserInfo userlogin(string userName, string password) { //調用D層的UserDao類,生成實例uDao Login.DAL .UserDAO uDao = new Login.DAL.UserDAO();
//調用uDao的selectUser方法,得到一個user類型的返回值。 Login.Model.UserInfo user = uDao.SelectUser(userName, password);
//這裡的user是來源於D層查詢結束後的返回值。(如果查到該數據,就返回user,如果沒有查到數據,則返回null)
//判斷是否登陸成功,如果成功則返回一個用戶的信息,如果失敗,則返回一個例外信息。 if (user != null) { return user; } else { throw new Exception(登陸失敗); } } } }
namespace Login.DAL {
//建立一個類用於存放鏈接字符串
class DBUtil { public static string ConString = @server=.(數據庫名稱);Database=login;Uid=sa;Pwd=你的數據庫密碼; }
//建立UserDAO類 public class UserDAO {
//定義selectUser類,這個類的作用是從數據庫中取出來user的基本信息,並將信息返回B層。 public Login.Model .UserInfo SelectUser(string userName, string password) {
//初始化conn。(建立實例,並且將DBUtil的constring值賦予它) using (SqlConnection conn = new SqlConnection(DBUtil.ConString)) {
//利用conn的鏈接建立一個command,它的作用是可以存儲sql語句 SqlCommand cmd = conn.CreateCommand(); cmd.CommandText = @SELECT ID ,username,password FROM Users WHERE username=@UserName ; cmd.CommandType = CommandType.Text; cmd.Parameters .Add (new SqlParameter (@UserName,userName)); cmd.Parameters .Add (new SqlParameter (@Password,password));
//打開conn數據鏈接,並且執行command中的命令 conn.Open();
//從數據庫中讀取數據 SqlDataReader reader = cmd.ExecuteReader(); Login.Model.UserInfo user = null; //將讀取的數據賦值給user while (reader.Read ()) { if (user == null) { user = new Login.Model.UserInfo(); } user.ID =reader.GetInt32(0); user.userName = reader.GetString(1); user.passWord = reader.GetString(2); }
//將得到的結果返回給B層 return user; } } } }至此,我們的三層的代碼的實現就完成了。感覺還算明了。期待進一步的提高。