【VB.net】三层登陆的代码实现


            上篇博客,我们学习了有关三层的一些理论知识。有关UI用户显示层、BLL业务逻辑层、DAL数据访问层,

Model层还有疑惑的小伙伴请戳VB.net】三层的理论认识

            本篇博客是关于VB.net三层登陆功能的代码实现。希望能给你带来一些收获,不足之处,希望你能在评论

里留下宝贵建议。

 

     第一步:

             我们还是看这张有关三层的包图,再次明确,三层之间的引用关系——U层引用了B层和EntityB层引用了

D层和EntityD层引用了Entity。(Entity就是下文的LoginModel  是模型实体的意思)

                      


     第二步:

             打开VS2012,新建解决方案之后,我们要新建项目,语言选择是Visual Basic。除了LoginUIWindows

窗体类型之外,其它的LoginBLLLoginDALLoginModelEntity)都是类库类型。

             新建项目后,在每一层的属性里,都要修改根命名空间的名称。

       

            举个栗子:

            例如下图是D层的根命名空间的修改。

      D层的根命名空间未修改之前和程序集“LoginDAL”是一模一样的。我们需要在 LoginDAL之间加一个点,变     为Login.DAL。(Do you know why?)

         

           

          

          按照上述方法,给B层,U层,Model层修改完成后,我们的解决方案就成型啦。

         下图为我的解决方案。

           

                                   

      

第三步:引用贴士

       各层之间的引用要正确。Don't forget it

       向上滚动滑轮,看好第一张三层的包图。

 

       举个栗子:

       U层为例,我们看看如何添加引用。

     U层要引用B层和LoginModel。我们就右击LoginUI——>添加引用——>给要引用的解决方案里的项目前打上对勾。

其它的B层,D层大家自己动手尝试一下吧!(LoginModel是不要引用其它项目的,Do you know why?)

   

     

    另外,我们下面的代码中也有涉及到引用。


第四步:各层代码的实现

 

1.从包含基础信息的LoginModel开始。

LoginModel

Public Class UserInfo

    '数据模型的信息,姓名 ID 密码
    Private T_UserName As String
    Public Property UserName() As String
        Get
            Return T_UserName
        End Get
        Set(ByVal value As String)
            T_UserName = value
        End Set
    End Property
    Private T_ID As Int32
    Public Property ID() As Int32
        Get
            Return T_ID

        End Get
        Set(ByVal value As Int32)
            T_ID = value
        End Set
    End Property

    Private T_Password As String
    Public Property Password() As String
        Get
            Return T_Password
        End Get
        Set(ByVal value As String)
            T_Password = value
        End Set
    End Property


    
End Class


        2.下面该是数据库D层了,我们首先要做好的工作就是,要建立好数据库,以及新建一张用户表,在表中添加一则

用户信息。

然后,D层中DBunit(连接数据库)的代码:

       

Imports System.Data.SqlClient
Public Class DBUtil
    '定义ConnString函数为数据库连接
    Public Shared Function ConnString() As SqlConnection
        Dim cnStr As String
        '连接数据库需要的信息赋值给字符串cnStr
        cnStr = "Server=LOUISE; Database=VB.net Login; User ID=sa; Password=12"

        Dim cn As SqlConnection   '定义cn为一个数据库连接
        cn = New SqlConnection(cnStr) '实例化一个连接
        Return cn '返回这个连接
    End Function
End Class

UserDAO(数据库相关操作)的代码:

      

Imports System.Data.SqlClient
Imports System.Data
Public Class UserDAO
    '定义选择用户函数,user参数为model里的数据模型
    Public Function SelectUser(ByVal user As Login.Model.UserInfo) As Login.Model.UserInfo
        Dim cn As SqlConnection = DBUtil.ConnString
        Dim sql As String

        'sql为连接数据库的字符串
        sql = "SELECT * FROM T_Users WHERE UserID=@UserID AND Password=@Password"
        Dim cmd As SqlCommand = New SqlCommand(sql, cn) '定义一个sqlcommand函数用来传递参数信息

        cmd.Parameters.Add(New SqlParameter("@UserID", user.UserName))
        cmd.Parameters.Add(New SqlParameter("@Password", user.Password))

        cn.Open() '连接打开
        Dim reader As SqlDataReader '定义读取数据库信息的reader
        reader = cmd.ExecuteReader 'sqlcommand函数执行reader赋值给reader
        Dim uuser As New Login.Model.UserInfo
        While (reader.Read())
            uuser.ID = reader.GetString(0)
            uuser.UserName = reader.GetString(1)
            uuser.Password = reader.GetString(2)
        End While
        Return uuser



    End Function

End Class

3.下面紧接着我们来看看,B层的LoginManager(登陆业务逻辑)代码:

Public Class LoginManager
    '公共函数UserLogin,定义一个实体层User
    Public Function UserLogin(ByVal User As Login.Model.UserInfo) As Login.Model.UserInfo  'user 什么意思?
        Dim uDAO As New Login.DAL.UserDAO 'B层需要引用D层数据库
        Dim uuser As Login.Model.UserInfo 'B层引用Entity,定义一个uuser

        uuser = uDAO.SelectUser(User)

        If IsNothing(uuser) Then
            Throw New Exception("登陆失败,请重新登陆。")
        Else
            If IsNothing(uuser.Password) Then
                Throw New Exception("登陆失败,请输入密码。")
            Else
                MsgBox("恭喜你,登陆成功啦!")
                Return uuser   '返回user实体
            End If
        End If


    End Function
End Class

 

4.最后我们看看U层(用户显示层)的代码:

Public Class frmLogin

    Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click

        Dim manager As New Login.BLL.LoginManager
        Dim user As New Login.Model.UserInfo
        user.UserName = txtUserName.Text.Trim
        user.Password = txtPassword.Text

        manager.UserLogin(user)
        
    End Sub

    Private Sub frmLogin_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Me.AcceptButton = btnLogin
    End Sub
End Class

      C# 版本的代码,已上传我的资源

本文小结:

 

以上是三层的全部代码实现,注释有待提高,三层的理解也在机房重构里愈来愈多。

层层架构,对于程序,对于代码,对于我们都是一个新征程的开始!Keep fighting


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值