日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

三层架构—实践篇(.Net登录实例)

發布時間:2025/6/15 asp.net 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 三层架构—实践篇(.Net登录实例) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、框架的搭建


U層引用Model層

B層引用Model層和DAL層

D層引用Model層和數據庫連接ImportsSystem.Data.SqlClient??

二、UML圖

1、類圖


U層:Windows1

B層:LoginUser

D層:UserDAO

Model層:UerEn

2、時序圖


3、包圖(設計模式在代碼中未體現,以后補充)

Link用來存儲連接字符串及SQL語句(以后補充)


三、代碼展示

1、實體類

[vb]?view plaincopy
  • <span?style="font-size:18px;">Public?Class?UserEn??
  • '定義所用到的屬性??
  • ????Private?_userName?As?String??
  • ????Public?Property?UserName?As?String??
  • ????????Get??
  • ????????????Return?_userName??
  • ????????End?Get??
  • ??
  • ????????Set(ByVal?value?As?String)??
  • ???????????_userName?=?value??
  • ????????End?Set??
  • ????End?Property??
  • ??
  • ????Private?_password?As?String??
  • ????Public?Property?Password?As?String??
  • ????????Get??
  • ????????????Return?_password??
  • ????????End?Get??
  • ??
  • ????????Set(ByVal?value?As?String)??
  • ????????????_password?=?value??
  • ????????End?Set??
  • ????End?Property??
  • End?Class</span>??
  • 2、U層

    [vb]?view plaincopy
  • <span?style="font-size:18px;">Imports?Login.BLL???????????'層中引用,在調用對象時不用寫命名空間名??
  • Imports?Model??
  • Public?ClassStartWindow??
  • ??
  • ????'退出程序??
  • ????Private?Sub?btnexit_Click(sender?As?Object,e?As?EventArgs)?Handles?btnexit.Click??
  • ????????End??
  • ????End?Sub??
  • ????'登錄??
  • ??
  • ????Private?Sub?btnOK_Click(sender?As?Object,?eAs?EventArgs)?Handles?btnOK.Click??
  • ????????Try??
  • ??
  • ????????????Dim?user1?As?New?UserEn?????????????????'實例化實體類,user1為實體類的對象??
  • ????????????Dim?check?As?New?LoginUser??????????????'實例化B層的LoginUser類??
  • ????????????Dim?user?As?Boolean????????????????????'定義布爾型變量,用來返回(也可定義為實體類型,返回實體類)??
  • ??????????????
  • <span?style="font-size:18px;">????????????</span>user1.UserName?=txtUserName.Text.Trim????'把文本框用戶名賦給實體類中的UserName??
  • ????????????user1.Password?=txtPassword.Text??????????'同理??
  • ??
  • ????????????If?txtUserName.Text?=?""Then??????????????'判斷用戶名文本框是否為空??
  • ???????????????MessageBox.Show("請輸入用戶名!")??
  • ????????????End?If??
  • ??
  • ????????????If?txtPassword.Text?=?""Then???????????????'同理??
  • ???????????????MessageBox.Show("請輸入密碼!")??
  • ????????????End?If??
  • ????????????user?=?check.Login(user1)??????????????????'把B層Loin方法判斷返回的值賦予user,左右同時為真則登錄成功??
  • ????????????MessageBox.Show("成功登錄!")??
  • ????????Catch?ex?As?Exception???????????????????????????'捕獲從B/D層拋出的異常??
  • ??
  • ????????????MsgBox(ex.Message)??
  • ????????End?Try??
  • ????End?Sub??
  • End?Class</span>??

  • 3、B層

    [vb]?view plaincopy
  • <span?style="font-size:18px;">Imports?Model??
  • Imports?Login.DAL??
  • ??
  • Public?ClassLoginUser??
  • ??
  • ????Function?Login(ByVal?user1?As?Model.UserEn)As?Boolean??
  • ????????Dim?Dal?As?New?UserDAO?????????????'實例化D層UserDAO對象??
  • ????????Dim?user2?As?Boolean????????????????'定義變量??
  • ??
  • ????????user2?=?Dal.SelectUser(user1)??????'調出D層方法SelectUser??
  • ????????'判斷返回結果???
  • ????????If?user2?Then??
  • ????????????Return?True??
  • ????????Else??
  • ????????????Throw?NewException("登錄失敗!")??
  • ????????????Exit?Function??
  • ????????End?If??
  • ????End?Function??
  • End?Class</span>??
  • 4、D層

    [vb]?view plaincopy
  • <span?style="font-size:18px;"><span?style="font-size:18px;">Imports?Model??
  • ImportsSystem.Data.SqlClient???????????'數據庫連接需引用??
  • ImportsSystem.Data.SqlClient.SqlCommand??
  • Public?Class?UserDAO??
  • ??
  • ????'連接數據庫??
  • ????'SqlConnection表示一個到?SQL?Server數據庫的打開的連接。此類不能被繼承。??
  • ????Dim?connDB?As?String?="Server=.;Database=MyLogin;User?ID=sa;Password=123;"??
  • ????Dim?connSQL?As?SqlConnection?=?NewSqlConnection(connDB)??
  • ??
  • ????Function?SelectUser(ByVal?user1?AsModel.UserEn)?As?Boolean??
  • ??
  • ????????'把要執行的SQL語句賦給字符串變量sql??
  • ??
  • ????????Dim?sql?As?String?=?"select?*?FromUserInfo?where?UserID=@UserName?AND?Password=@Password;"??
  • ????????Dim?cmd?As?SqlCommand?=?NewSqlCommand(sql,?connSQL)?????????'執行查詢語句??
  • ??
  • ???
  • ??
  • ????????'通過把實體的相關內容賦給參數,再將參數帶到數據庫對比(防止SQL注入)??
  • ??
  • ????????cmd.Parameters.Add(NewSqlParameter("@UserName",?user1.UserName))??
  • ????????cmd.Parameters.Add(NewSqlParameter("@Password",?user1.Password))??
  • ??
  • ????????'打開連接,讀取數據??
  • ??
  • ????????connSQL.Open()??
  • ????????Dim?read?As?SqlDataReader?=cmd.ExecuteReader()??
  • ??
  • ????????'若存在數據則返回True,否則相反??
  • ??
  • ????????If?read.Read()?Then??
  • ????????????Return?True??
  • ????????Else??
  • ????????????Return?False??
  • ????????????Exit?Function??
  • ????????End?If??
  • ????End?Function??
  • End?Class</span>??
  • </span>??
  • 結果:



    四、知識點小結

    1、傳實體與傳參數區別

    ??????? 在參數較少的情況下,使用傳參比較方便;用的參數較多建議使用傳實體,效率較高

    注意:如果在界面上顯示數據則設計到對實體的拆裝箱操作

    例子:C#語言

    [csharp]?view plaincopy
  • <span?style="font-size:18px;">?user.ID?=?reader.GetInt32(0);??
  • ?user.UserName?=?reader.GetString(1);??
  • ?user.Password?=?reader.GetString(2);??
  • ??if(!reader.IsDBNull(3))??
  • ??
  • ?{??
  • ???user.Email?=?reader.GetString(3);??
  • }</span>??
  • 2、每層引用與單層Imports引用區別

    層與層間引用:可以通過命名空間.類名,實現調用

    層中Imports引用:直接寫調用的類名即可

    3、實例化對象與定義同類型變量區別

    newUserEn()是指在內存中開辟了一塊空間,創建了一個對象,然后讓一個UserEn類型的變量user引用(指向)它。user也只不過是創建的那個實體對象的名稱而已。

    ?

    總結

    以上是生活随笔為你收集整理的三层架构—实践篇(.Net登录实例)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。