首先,向大家通知一個好消息——我的三層終於實現了!!!這兩天,一直在調一個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;
}
}
}
}
至此,我們的三層的代碼的實現就完成了。感覺還算明了。期待進一步的提高。