【三層登入之C#版】

我是太陽啦啦啦發表於2016-03-29

前言

經歷了VB.NET之後,接下來的學習就是三層,三層的學習,讓我初步瞭解分層的思想。三層的學習,是視訊中老師通過具體的一個例項來講解的,講解的很是詳細的!通過總結,使得自己的思路更加清晰,也希望對大家有幫助

核心

(一)解決方案

解決方案,這讓我們一覽專案全域性,知道這個專案中有什麼?

(二)如何做

1.首先我們建起了自己的專案
2.之後把各層、層中的類建起來,這樣大致的三層框架就出來了
3.注意,新增引用,引用的作用是很重要的
4.開始敲程式碼

(三)程式碼模組

U層:LoginUI
<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">private void btnLogin1_Click_1(object sender, EventArgs e)
        {
            string userName = txtUserName1.Text.Trim(); //將文字框中的姓名賦值給新的變數userName
            string password = txtPassword1.Text;//同樣將文字框中的密碼賦值給新的變數password

            Login.BLL.LoginManager mgr = new Login.BLL.LoginManager();//例項化Login.BLL.LoginManager
            Login .Model .UserInfo user= mgr.UserLogin(userName, password);//把U層的userName,password傳入實體中

           MessageBox.Show("登入使用者:" + user.UserName);//提示框顯示此時的登入使用者
        }</span></span></span>
B層:LoginBLL
<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">namespace Login.BLL
{
    public class LoginManager
    {
        public Login.Model.UserInfo  UserLogin(string userName,string password)
        {
            Login .DAL .UserDAO uDao = new Login.DAL.UserDAO();//例項化Login.DAL.UserDAO
            Login.Model.UserInfo user = uDao.SelectUser(userName, password);//把當前的userName, password傳給實體層

            if (user !=null )//判斷使用者是否為空
            {
                Login.DAL.ScoreDAO sDao = new Login.DAL.ScoreDAO();//例項化Login.DAL.ScoreDAO
                sDao.Update(userName, 10);//更新該使用者,給使用者加分
                return user;
            }
            else
            {
                throw new Exception("登入失敗");//使用者為空,顯示登入失敗
            }
        }</span></span></span>
D層:LoginDAL
DbUtil類
<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">namespace Login.DAL
{
    public class DbUtil
    {
        public static string ConnString = @"Server=dujuan;Database=Login;User ID=sa;Password=sjk";
        //連線資料庫,Server:計算機名
    }
}</span></span></span>
userDAO類
<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">namespace Login.DAL
{
   public  class UserDAO
    {
       public Login .Model .UserInfo SelectUser(string userName,string password)
       {
           //using後連線自動關閉
          using ( SqlConnection conn=new SqlConnection (DbUtil .ConnString )) 
          {
              
              SqlCommand cmd = conn.CreateCommand();//建立命令物件
              cmd.CommandText = @"SELECT ID,UserName,Password,Email FROM USERS WHERE UserName=@UserName AND Password=@Password";
              cmd .CommandType = CommandType.Text;
              cmd.Parameters.Add(new SqlParameter("@UserName", userName));
              cmd.Parameters.Add(new SqlParameter("@Password", password));

              conn.Open();//開啟連線
              SqlDataReader reader = cmd.ExecuteReader();

              Login.Model.UserInfo user = null;
              while (reader .Read ())//讀取資料,呼叫Read方法,判斷資料庫是否有資料
              {
                  if (user ==null )
                  {
                      user = new Login.Model.UserInfo();
                  }
                  user.ID=reader.GetInt32(0);
                  user.UserName = reader.GetString(1);
                  user.Password = reader.GetString(2);
                  if (!reader .IsDBNull (3))
                  {
                      user.Email = reader.GetString(3);
                  }
              }
              return user;//返回物件
          }
       }
    }
}</span></span></span>
scoreDAO類
<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">amespace Login.DAL
{
    public class ScoreDAO
    {
        public void Update(string userName, int value)//更新
        {
            using (SqlConnection conn = new SqlConnection(DbUtil.ConnString))
            {
                SqlCommand cmd = conn.CreateCommand();//建立命令
                cmd.CommandText = @"INSERT INTO SCORES(UserName,Score)Values(@UserName,@Score)";
                cmd.Parameters.Add(new SqlParameter("@UserName", userName));
                cmd.Parameters.Add(new SqlParameter("@Score", value));

                conn.Open();//開啟連線
                cmd.ExecuteNonQuery();//執行命令

            }
        }
    }
}</span></span></span>

實體層:LoginModel
<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">namespace Login.Model
{
    public class UserInfo
    {
        public int ID { get; set; }
        public string UserName { get; set; }
        public string Password { get; set; }
        public string Email { get; set; }
    }
}</span></span></span>

(三)理解

三層:

  UI層介面層:主要是使用者看到的內容,主要作用,獲取文字框中的內容:使用者名稱和密碼,將獲取到的使用者名稱和密碼傳送給B層。
   BLL層
業務邏輯層:將U層傳送的資訊傳給DAL層,並接收D層返回來的查詢結果。將查詢結果和從U層傳遞來的資料進行比較。
  DAL層
資料訪問層:建立資料庫連線,在資料庫中查詢使用者名稱和密碼,將查到的結果返回給B層。最後,將結果返回給U層。
實體層
封裝資料,在各層中間傳遞。實體層的宣告的變數與資料庫表是對應的,表中有多少內容,在實體層就宣告多少

三層之間的引用關係(包圖):



總結:

這只是剛剛開始,在下一篇部落格中,我們一起來學習三層的基本知識,瞭解是什麼?為什麼?鞏固基礎,添磚加瓦。

相關文章