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