学了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层传的参数,这一点非常不好。现在传的数据类型比较少可以用传参来完成,但是重构机房的时候传实体才是真正面向对象的体现!而且传实体也比传参数简单的多,不容易丢东西。另外就是我的命名不规范,这个我在重构中一定会改正的!