三层登录——实体作为参数

        历经这么长的时间,我的三层学习可以算是完成了吧,在这期间经历了很多,也成长了很多:首先,在学习心态上感觉自己发生了一些变化(自己的进度虽然慢,但是不再专注于时间了,能找出自己的不足了);再有,刚开始的时候是按照视频上面的东西去做的,没有加入自己的思想,不会挖掘深入的一些东西,通过师傅的指导把三层进行了一个反复的过程。感谢师傅在这段时间内对我的指导。

        下面,向大家展示一下我的三层登录的成果吧:

1.新建项目:这个大家都知道,我就不多说废话了,我的窗体建立如下:


2.新建数据库:数据库的建立方法大家也应知道了,我的建立情况如下图所示:


3.在各个窗体中添加引用:

       在要添加引用的窗体名称上“右击”,就会看到“添加引用”,然后就会看到以下的画面


        然后在要引用的类库的名称前面打钩,单击“确定”,这个就算添加完成了。

4.代码:

(1)实体层:

<span style="font-size:18px;">    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层

<span style="font-size:18px;">Public Class Form1

    Private Sub cmdOK_Click(sender As Object, e As EventArgs) Handles cmdOK.Click
        Try
            '获得表现层的数据
            Dim euser2 As New LoginModel.UserInfo                           '实例化新的UserInfo,用来传递B层的实体
            Dim euser3 As LoginModel.UserInfo                                    '定义一个类型为UserInfo的参数,用来赋值
            euser2.UserName = txtUserName.Text.Trim             '将用户名传递给实体层的UserName
            euser2.PassWord = txtPassWord.Text                       '将密码传递给实体层的PassWord

            '调用B层,登录判断
            Dim mgr As New LoginBLL.LoginManager
            euser3 = mgr.UserLogin(euser2)

        Catch ex As Exception
            MessageBox.Show(ex.Message.ToString())
        End Try
    End Sub
End Class
</span>
     (3)B层
<span style="font-size:18px;">Public Class LoginManager
    Public Function UserLogin(ByVal User As LoginModel.UserInfo) As LoginModel.UserInfo
        Dim uDao As New LoginDAL.UserDAO                                      '实例化D层中新的UserDAO对象
        Dim eUser1 As LoginModel.UserInfo                                          '定义一个类型为实体层UserInfo的参数,用于赋值

        eUser1 = uDao.SelectUser(User)

        '判断是否查询到记录,若有,登录成功,并返回实体euser1
        '若isnothing(eUser1)则判断失效,均为登录成功。。。不解。。是isnothing用错了,还是哪儿的逻辑问题?
        If IsNothing(eUser1.UserName) Then
            Throw New Exception("登录失败,请检查用户名和密码!")
        Else
            MsgBox("系统登录成功,请稍侯!")
            Return eUser1

        End If
    End Function
End Class
</span>
      (4)D层
<span style="font-size:18px;">Imports System.Data
Imports System.Data.SqlClient
Imports LoginModel

Public Class UserDAO
    '创建数据库连接
    Public conn As New SqlConnection("Server=lxf-PC;Database=charge1;User ID =sa;Password=123456")
    
    Public Function SelectUser(ByVal User As UserInfo) As LoginModel.UserInfo              '传实体UserInfo,而不是参数ID、UserName等,这样可方便对实体中的参数进行调用

        Dim reader As SqlDataReader                                                                     '定义类型为sqlDatareader的变量reader
        Dim eUser As New LoginModel.UserInfo                                                               '实例化新的UserInfo

        
        '@UserName相当于传了一个参数,("@UserName", User.UserName)相当于给参数名字传递了参数。
        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                                                                           '获取SQL语句的具体内容
        cmd.CommandType = CommandType.Text                                                '获取上述SQL语句的具体类型,在此为Select
        cmd.Parameters.Add(New SqlParameter("@UserName", User.UserName))  '若用成eUser.UserName则会出现参数未传递的错误提示
        cmd.Parameters.Add(New SqlParameter("@PassWord", User.PassWord))

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

        '读取查询到的数据,并返回给相应的属xìng
        While reader.Read()
            '获取数据库中相应字段的数据
            '数组必须从零开始读取,否则会超出其界限
            eUser.UserName = reader.GetString(0)
            eUser.PassWord = reader.GetString(1)
        End While
        Return eUser                                                                                               '返回查询到的实体
        conn.Close()                                                                                                '关闭连接
    End Function
End Class
</span>
5.登录结果展示:


6.接口

   在这个三层的建立过程中我并没有添加接口,其实,是完全可以把数据库和D层直接添加一个接口的,这样,D层就是通过接口来访问的数据库,而不是直接访问的数据库

<span style="font-size:18px;">class DbUtil
    {
        public static string ConnString = @"Server=lxf-PC;Database=charge1;User ID =sa;Password=123456";
    }</span>
这样在D层的
<span style="font-size:18px;">SqlConnection conn = new SqlConnection(DbUtil.ConnString)</span>
就不用直接添加那一行代码了。

评论 40
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值