.NET版三层登录

来源:互联网 发布:赛维网络面试 编辑:程序博客网 时间:2024/05/16 07:02

       看着视频敲了一遍登录的例子,好像只是知道了三层里有D层、B层、U层,每层都是相互独立的,然后将数据逐层的传递。但是具体是怎么实现的,还是有点蒙……

       在敲.NET版三层登录之前参考了很多人的博客,这才慢慢的下手,敲上一遍,就觉得有清楚了很多……

       首先,建立以下的Windows应用程序以及类库:


实体类(Model)代码:

<span style="font-size:18px;">Public Class UserInfo    Private _username As String    'Private _ID As Decimal    'Public Property ID As Decimal    '    Get    '        Return _ID    '    End Get    '    Set(value As Decimal)    '        _ID = value    '    End Set    'End Property    Public Property UserName As String        Get            Return _username        End Get        Set(ByVal value As String)            _username = value        End Set    End Property    Private _pwd As String    Public Property Pwd As String        Get            Return _pwd        End Get        Set(value As String)            _pwd = value        End Set    End PropertyEnd Class</span>


D层代码:(引用model实体类)

<span style="font-size:18px;">'引用命名空间Imports System.DataImports System.Data.SqlClientImports Login.Model'Imports LoginDALPublic Class UserDAO    '连接数据库    'Dim sqlConnectStr As String = "sever=YU;database=Login;User ID =sa;Password=123456"    'Dim sqlConnection1 As SqlConnection = New SqlConnection(sqlConnectStr)    Public conn As New SqlConnection("server=YU;database=Login;User ID =sa;Password=123456")    Public Function SelectUser(ByVal UserDAO As Login.Model.UserInfo) As Login.Model.UserInfo        '传递实体参数UserInfo而不是id,name,这样也方便对实体中的参数进行调用        Dim reader As SqlDataReader    '定义SqlDataReader对象        Dim eUser As New Login.Model.UserInfo        Dim sql As String = "select UserName,Password FROM Users WHERE UserName=@username and Password=@password"        Dim cmd As New SqlCommand(sql, conn)   '定义sqlcommand对象        cmd.CommandText = sql        cmd.CommandType = CommandType.Text        cmd.Parameters.Add(New SqlParameter("@username", UserDAO.UserName))        cmd.Parameters.Add(New SqlParameter("@password", UserDAO.Pwd))        conn.Open()        reader = cmd.ExecuteReader        While reader.Read()            eUser.UserName = reader.GetString(0)            eUser.Pwd = reader.GetString(1)        End While        Return UserDAO        reader.Close()    End FunctionEnd Class</span>


B层代码:(引用D层和model实体类)

<span style="font-size:18px;">Imports Login.DALPublic Class LoginManager    Public Function UserLogin(ByVal UserDAO As Login.Model.UserInfo) As Login.Model.UserInfo        Dim uDao As New Login.DAL.UserDAO        Dim eUser1 As New Login.Model.UserInfo        eUser1 = uDao.SelectUser(UserDAO) '将数据传给D层        '判断        If IsNothing(eUser1.UserName) Then            Throw New Exception("登录失败,请验证登录名和密码!")        Else            MsgBox("登录成功!")            Return eUser1        End If    End FunctionEnd Class</span>

U层代码:(引用model实体类和B层)

<span style="font-size:18px;">Public Class Form1    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btnOK.Click        Try            Dim eUser2 As New Login.Model.UserInfo            Dim eUser3 As New Login.Model.UserInfo            eUser2.UserName = txtUserName.Text.Trim '将U层数据传给实体            eUser2.Pwd = txtPassword.Text            Dim mgr As New Login.BLL.LoginManager '将数据传递给B层            eUser3 = mgr.UserLogin(eUser2)        Catch ex As Exception            MessageBox.Show(ex.Message.ToString())        End Try    End Sub    Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click        Me.Close()    End SubEnd Class</span>

      三层的特点是:U层、B层、D层都引用了实体类,但是实体类却不知道三层的存在。U层将数据传递给B层,B层进行处理,之后传递给D层,三层之间相互独立,如果哪一层发生变化,不会影响其他的层。总而言之:U层只负责显示和采集用户的信息和操作,B层只负责处理业务逻辑,D层只负责提供基本的数据访问。






0 0