程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 三層——c#版

三層——c#版

編輯:C#入門知識

三層——c#版


首先,向大家通知一個好消息——我的三層終於實現了!!!這兩天,一直在調一個bug一直鏈接不上數據庫,弄得我死的心都有了。就在昨天,當我把一個“,”改成了“;”後,一切都變的那麼的美好。我瞬間感覺,這個世界依舊是彩色的。依然是那麼的簡單,那麼的明亮。

現在,我把我的c#版的三層實現的過程給大家分享下,希望大家可以多多指點。微笑

登陸界面:U層

 

在這裡,我設計了一個簡單的界面,兩個標簽,兩個文本框,一個按鈕。從屬性窗口中將文本框的按鈕命名為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層的職責就是對數據進行邏輯的運算。登陸中只有一個判斷,所以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(登陸失敗);
            }
        }
    }
}

 

數據鏈接層:D層

D層的作用是鏈接數據庫,所有與數據庫直接交互的操作都在D層。在登陸的例子中D層有兩個類,第一個負責的是與D層的鏈接字符串的存儲,第二個類負責的是將數據庫與D層建立鏈接,並通過sql語句對數據庫進行一些操作。並將得到的結果反饋給B層。

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;
               
           }
       }
    }
}
至此,我們的三層的代碼的實現就完成了。感覺還算明了。期待進一步的提高。

 

 



 

 

 

 

 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved