微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

三层总结实践篇——三层登陆VB.BET版

有了上一篇博客的理论基础,不过,纸上学来终觉浅,下面我们实践一下!三层视频里面老师讲解的非常详细,代码是C#版的,下面我们就来看一下VB.NET版的三层登陆吧!其实与C#是一样的。

首先先看一下UI层。


代码如下:

'表现层
Public Class LoginUI

    Private Sub Button1_Click(sender As Object,e As EventArgs) Handles Button1.Click
        Try
            '获得UI层数据,传给BLL层
            Dim euser2 As New Entity.UserInfo   '实例化新的UserInfo,用来传递B层的实体
            Dim euser3 As New Entity.UserInfo    '定义一个类型为UserInfo的参数,用来赋值  

            euser2.UserName = txtUserName.Text.Trim  '将用户名传给实体层Username
            euser2.Password = txtPassword.Text.Trim   '将密码传给实体层的Password

            '调用B层,登录判断
            Dim mgr As New LoginBLL.LoginBLL
            euser3 = mgr.UserLogin(euser2)
        Catch ex As Exception  '异常处理
            MessageBox.Show(ex.Message.ToString())
        End Try
    End Sub
End Class

下面再来看一下BLL层。B层是三层架构的核心,让我们看一下。

'业务逻辑层
Public Class LoginBLL
    Public Function UserLogin(ByVal User As Entity.UserInfo) As Entity.UserInfo
        '实例化DAL层中新的UserDAO对象
        Dim uDao As New LoginDAL.UserDAO
        '定义一个类型为实体层的UserInfo的参数,用来赋值
        Dim eUser1 As Entity.UserInfo

        eUser1 = uDao.SelectUser(User)

        '判断是否存在用户名
        If Isnothing(eUser1.UserName) Then
            Throw New Exception("登录失败,请检查用户名和密码!")
        Else
            MsgBox("登录成功!","登陆成功")
            Return eUser1
        End If
    End Function
End Class

再来看一下DAL层。这一层只涉及对数据库的操作。

Imports System.Data
Imports System.Data.sqlClient
Imports Entity
'数据访问层
Public Class UserDAO
    '创建数据库连接为本机
    Public conn As New sqlConnection("server=localhost;database=login;user id=sa;password=199312";

    Public Function SelectUser(ByRef User As UserInfo) As Entity.UserInfo '传实体UserInfo,可方便对实体中的参数进行调用  

        Dim reader As sqlDataReader       '定义类型为sqlDatareader的变量reader  
        Dim eUser As New Entity.UserInfo        '实例化新的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",User.UserName))
        cmd.Parameters.Add(New sqlParameter("@Password",User.Password))

        conn.open()                       '打开数据连接  
        reader = cmd.ExecuteReader()              '执行查询语句,并生成一个DataReader  

        '读取查询到的数据,并返回相应的属性
        While reader.Read()
            '获取数据中相应字段的数据
            eUser.UserName = reader.GetString(0) '数组必须从0读取,否则会超出界限
            eUser.Password = reader.GetString(1)
        End While
        Return eUser                             '返回查询到的实体  
        conn.Close()    '关闭连接

    End Function
End Class

还有实体层,一般我都是在一开始先敲实体层的

'实体层,存放User的属性
Public Class UserInfo
    'Username属性
    Private _username As String
    Public Property UserName As String
        Get
            Return _username
        End Get
        Set(value As String)
            _username = value
        End Set
    End Property

    'Password属性
    Private _password As String
    Public Property Password As String
        Get
            Return _password
        End Get
        Set(value As String)
            _password = value
        End Set
    End Property
End Class

上一篇博客的数据传递方向,我们可以看出 各层的引用关系:DAL不引用BLLUIBLL引用DALUI引用BLL

三层登陆只是一个小小的例子,更深层次的应用,还在以后!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强制返回为文本 -------------------------------- 数字类型的格式化 --------------------------------     固定格式参数:     General Number 普通数字,如可以用来去掉千位分隔号     format$("100,1
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办法, Format 或者FormatDateTime 竟然结果和系统设置的区域语言的日期和时间格式相关。意思是尽管你用诸如 Format(Now, "MM/dd/yyyy"),如果系统的设置格式区域语言的日期和时间格式分隔符是"-",那他还会显示为 MM-dd-yyyy     只有拼凑: <%response.write
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace My ‘全局错误处理,新的解决方案直接添加本ApplicationEvents.vb 到工程即可 ‘添加后还需要一个From用来显示错误。如果到这步还不会则需要先打好基础啦 ‘======================================================== ‘以下事件
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用的爽呀,这篇文章写与2011年,看来我以前没有认真去找这个方法呀。 https://blog.csdn.net/chzjxgd/article/details/6176325 金蝶K3 BOS的插件官方是用VB6编写的,如果  能用.Net下的语言工具开发BOS插件是一件很愉快的事情,其中缘由不言而喻,而本文则是个人首创,实现在了用V
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选中的单元格进行处理 Dim m As Range, tmpStr As String, s As String Dim x As Integer, y As Integer, subStr As String If MsgBox("确定要分列处理吗?请确定分列的数据会覆盖它后面的单元格!", _
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single) 2 Dim path As String, hash As String 3 For Each fil
  Imports MySql.Data.MySqlClient Public Class Form1 ‘ GLOBAL DECLARATIONS Dim conString As String = "Server=localhost;Database=net2;Uid=root;Pwd=123456;" Dim con As New MySqlConnection
‘導入命名空間 Imports ADODB Imports Microsoft.Office.Interop   Private Sub A1() Dim Sql As String Dim Cnn As New ADODB.Connection Dim Rs As New ADODB.Recordset Dim S As String   S = "Provider=OraOLEDB.Oracl
Imports System.IO Imports System.Threading Imports System.Diagnostics Public Class Form1 Dim A(254) As String    Function ping(ByVal IP As Integer) As String Dim IPAddress As String IPAddress = "10.0.
VB运行EXE程序,并等待其运行结束 参考:https://blog.csdn.net/useway/article/details/5494084 Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long Pr