学了VB.NET视频,学了三层视频,那么接下来就是要实现VB.NET版的三层实例了!这个在一开始还真的无从下手,但是通过和C#的对比,发现VB.NET和C#以及VB的语句结构,思想都差不太多,所以就硬着头皮去做了。
下面就是我对VB.NET版三层实例的思考:
首先:
由于C#的实例实现了,所以我就想先“照葫芦画瓢”,就按着视频中讲的思路,以及三层的利用来进行,碰到不会写的VB.NET的语句就上百度!算是基本上找到了一点感觉!
接下来:
下面是我从网上查到的配置文件的解释:
那么怎么应用配置文件呢?
其中:
<add key="name" value="我是远程服务器"/>
Private strConnection As String
strConnection = System.Configuration.ConfigurationManager.AppSettings("connString")
最后:
我在写这个程序的时候,运行起来不论输入的对错,总是显示“登录成功!”,我知道是B层的逻辑肯定出错了,但是却不知道是哪里。所幸由郑浩同学和王海鹏同学给找出来了!非常感谢他们俩,从他们的讨论中我也学到了很多在写代码中非常迷惑的东西!对数据在三层怎么进行传递明白了好多!也许这也是团队合作的好处!
下面就是我的代码:
U层:
- Imports System.Data.sqlClient
- Public Class 登录窗体
- Private Sub btnLogin_Click(sender As Object,e As EventArgs) Handles btnLogin.Click
- Dim manager As LoginBLL.LoginManagement = New LoginBLL.LoginManagement()
- Dim userin As User类.userModol = New User类.userModol() '实例化实体类为user,这样就可以任意调用实体类中的任何信息了。
- Dim UserName As String
- Dim UserPWD As String
- UserName = txtUserName.Text '将实体类的用户名和密码付给一个变量进行类型转换
- UserPWD = txtPassword.Text
- userin = manager.userLogin(UserName,UserPWD) '调用B层的方法。核对数据库中是否有输入的用户名
- txtUserName.Text = ""
- txtPassword.Text = ""
- txtUserName.Focus()
- End Sub
- End Class
D层:
- Public Class LoginServer
- '打开数据库对数据进行操作,并返回实体类类型的用户名和密码
- '在这里用到了配置文件
- Private userinfo As New User类.userModol
- Private rs As sqlClient.sqlDataReader
- Private conn As sqlClient.sqlConnection
- Private com As sqlClient.sqlCommand
- Private strConnection As String
- '执行连接字符串,这里用到的是配置文件。
- Public Sub New()
- conn = New sqlClient.sqlConnection
- '下面是最重要的一句(关于配置文件的应用)
- strConnection = System.Configuration.ConfigurationManager.AppSettings("connString")
- conn.ConnectionString = strConnection
- End Sub
- Public Function Query(ByVal userID As String,ByVal userPwd As String) As User类.userModol
- '从数据库中查询用户的用户名和密码,并返回到实体类中
- com = New sqlClient.sqlCommand("select * from Users where UserName='" + userID + "'and Password='" + userPwd + "'",conn)
- Try
- rs = com.ExecuteReader
- While (rs.Read)
- '将数据库中的用户名和密码赋给变量userinfo,从而传到user实体类中
- userinfo.userName = rs.Item("UserName")
- userinfo._userPWD = rs.Item("Password")
- End While
- Return userinfo
- Catch ex As Exception
- Throw ex
- Finally
- End Try
- End Function
- End Class
B层:
- Public Class LoginManagement
- '设计一个方法,用以得到实体类User类中的信息并进行逻辑判断
- Public Function userLogin(user As String,userPWD As String) As User类.userModol
- Dim userDAL As LoginDAL.LoginServer = New LoginDAL.LoginServer()
- Dim userInfo As User类.userModol = New User类.userModol()
- '将实体类中的信息和BLL类中的信息核对,如果正确,则返回给实体类。
- '同时将DAL类对数据库操作后的数据传给实体类。
- userInfo = userDAL.Query(user,userPWD)
- If (userInfo.userName Is Nothing) Then
- MsgBox("您的用户名和密码不匹配,或者不存在!")
- Else
- MsgBox("登录成功!")
- End If
- Return userInfo
- End Function
- End Class
实体类:
- Public Class userModol
- Dim user As String '用户名
- Dim userPWD As String '密码
- Dim Email As String
- Public Property userName() As String
- Get
- Return user
- End Get
- Set(value As String)
- user = value
- End Set
- End Property
- Public Property _userPWD As String
- Get
- Return userPWD
- End Get
- Set(value As String)
- userPWD = value
- End Set
- End Property
- End Class
总结:
师父验收我三层的时候说我写的三层大概的数据怎么传递都实现了,但是我B层传的参数,这一点非常不好。现在传的数据类型比较少可以用传参来完成,但是重构机房的时候传实体才是真正面向对象的体现!而且传实体也比传参数简单的多,不容易丢东西。另外就是我的命名不规范,这个我在重构中一定会改正的!