【三层】——C#与VB.NET各显神通

背景:

   三层登录刚开始是用C#敲的,通过走代码理解了一下,对上层之间的关系基本上算是比较清楚了,终于要开始机房重构了,但是培养计划要求是用VB.NET敲,想到这里,小编忍不住想说一句:臣妾做不到啊!之前学过VB.NET视频,但是感觉很空,没有什么实际掌握的知识,现在又让用VB.NET敲机房,对于这门新的语言自己也查过C#与VB.NET的不同,没有实际的敲过,看到的知识就不会很快的转换成自己所学到的,用生物学的术语说是只是同化,没有顺应;下面就通过三层的登录小Demo来体会一下吧。

一、通过三层登录Demo看C#与VB.NET:

 1.门外初识——表示方法不同

  C#编写的类及类库:【三层】——C#与VB.NET各显神通_第1张图片                 VB.NET编写的类及类库:

 2.走进了解——编写语法等不同


     VB.NET 代码部分:(C#版代码 参见:【三层】-C#版登录例子)

       UI层——

        

<span style="font-family:FangSong_GB2312;font-size:18px;">Public Class Form1
   Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
        '声明变量
        Dim username As String
        Dim password As String
        Dim mgr As LoginBLL.LoginManager
        Dim user As LoginModel.UserInfo
        '获取用户名和密码
        username = txtUserName.Text.Trim
        password = txtPassWord.Text
        '实例化B层业务逻辑类,将U层数据传给B层
        mgr = New LoginBLL.LoginManager
        user = mgr.UserLogin(username, password)
        '信息提示
        MessageBox.Show("登陆成功!")
End Sub</span>

BLL层——

 

<span style="font-family:FangSong_GB2312;font-size:18px;">Public Class LoginManager
    '声明自定义函数UserLogin,将userName,password作为参数传值并返回UserInfo类的结果
    Public Function UserLogin(ByVal userName As String, ByVal password As String) As LoginModel.UserInfo

        Dim uDao As LoginDAL.UserDAO
        Dim user As LoginModel.UserInfo
        Dim sDAO As LoginDAL.ScoreDAO
        '通过D层访问数据库返回User信息到B层,调用DAL
        uDao = New LoginDAL.UserDAO()
        user = uDao.SelectUser(userName, password)
        '逻辑判断,是否增加积分,调用DAL
        If Not user Is Nothing Then
            sDAO = New LoginDAL.ScoreDAO()
            sDAO.UpdataScore(userName, 10)
            Return user
        Else
            '没有该用户,抛出异常‘登录失败’
            Throw New Exception("登录失败")

        End If

    End Function
End Class</span>
DAL层(部分)——

<span style="font-family:FangSong_GB2312;font-size:18px;">Imports System.Data.SqlClient
Public Class UserDAO
    '定义一种从数据库中查找用户的方法,并返回用户信息
    Public Function SelectUser(ByVal username As String, ByVal password As String)
        Dim db As New LoginModel.Dbutil
        Using conn As New SqlConnection(db.ConnString)

            Dim reader As SqlDataReader
            Dim cmd As New SqlCommand
            cmd = conn.CreateCommand()

            Dim user As LoginModel.UserInfo
            '利用参数访问数据库执行命令,而不使用拼接字符串,是为了防止SQL注入
            cmd.CommandText = "select * from Users where UserName=@UserName and Password =@Password"
            cmd.CommandType = CommandType.Text

            cmd.Parameters.Add(New SqlParameter("@UserName", username))
            cmd.Parameters.Add(New SqlParameter("@Password", password))

            conn.Open()
            '读取数据,执行sql语句
            reader = cmd.ExecuteReader()
            '不明白,求指点
            user = Nothing
            '利用While语句读取数据,执行查询
            While (reader.Read())
                If (user Is Nothing) Then
                    user = New LoginModel.UserInfo()


                End If
                '将读取到的第一个内容转化为32位的int类型并赋值给实体层的UserInfo
                user.ID = reader.GetInt32(0)
                '将读取到的第二个内容转化为字符串类型并赋值给实体层的UserInfo
                user.UserName = reader.GetString(1)
                '将读取到的第三个内容转化为字符串类型并赋值给实体层的UserInfo
                user.Password = reader.GetString(2)
                '判断如果第四个有内容则赋值给实体层的UsrInfo
                If (Not reader.IsDBNull(3)) Then
                    user.Email = reader.GetString(3)
                End If
            End While
            Return user

         '释放资源
        End Using
        '关闭函数
    End Function
End Class
</span>
Model层——

<span style="font-family:FangSong_GB2312;font-size:18px;">Public Class UserInfo
    Private _id As Integer
    Public Property ID() As Decimal
        Get
            Return _id

        End Get
        Set(value As Decimal)
            _id = value
        End Set
    End Property
    Public UserName As String
    Public Password As String
    Public Email As String

End Class</span>

<span style="font-family:FangSong_GB2312;font-size:18px;">Public Class Dbutil
    '数据库连接语句,连接字符串=“ 服务器名称=;数据库名称=;用户名=;密码=;”
    Public ConnString As String = "Server=(local);Database=Login;User ID=sa;Password=123456"
End Class</span>
【三层】——C#与VB.NET各显神通_第2张图片

二、通过两门语言反观三层架构

    【三层】——C#与VB.NET各显神通_第3张图片

总结:

     通过用VB.NET又敲一遍三层,对于三层的逻辑引用关系有近一步的认识,但对各层之间代码的所属关系不是很清楚,希望正在路过的你多多指教。



   

  

你可能感兴趣的:(C#,VB.NET,三层登录)