VB.net版机房收费系统——三层登录
年后开学这几天,一直在整VB.net版的机房收费系统,设计了数据库,画了ER图,把相关的文档更新了一丁点儿,接下来,就开始了三层之旅。 虽说看了王继彬老师讲的三层视频后,也用C# 代码实现了三层登陆,但是理解得还是不深刻,实战的时候就看出了自己的不足。于是,看了好多博客,最后一句简单的代码让我瞬间明白了全局,终于实现了登录,这也让我对七层登录的实现满怀信心~ 首先看一下相关的解决方案:
下面是相关的代码,写了好多注释,从代码中可以看出我的学习过程和理解~ Entity层
<span style="font-size:18px;">Public Class eUserLogin '定义属性变量 Private e_UserID As String Private e_PassWord As String '用户名 Public Property UserID() As String Get Return e_UserID End Get Set(value As String) e_UserID = value End Set End Property '密码 Public Property PassWord() As String Get Return e_PassWord End Get Set(value As String) e_PassWord = value End Set End Property End Class</span>如果把实体层比作一辆车的话,里边定义的属性变量就是乘客,而且是VIP级的,因为若是没有提前报名,他是不会搭理你的~ UI层
<span style="font-size:18px;">Public Class frmLogin Private Sub btnLogin_Click(sender As Object,e As EventArgs) Handles btnLogin.Click Try '定义的UserInfo算是全局实体,很像是直达的列车,中途不倒车 Dim UserInfo As New Entity.eUserLogin '将用户名和密码放入实体 UserInfo.UserID = txtUserName.Text.Trim() UserInfo.PassWord = txtPassword.Text.Trim() '判断输入是否正确 If txtUserName.Text = "" Then MsgBox("用户名不能为空!",MsgBoxStyle.Information + MsgBoxStyle.OkOnly,"提示") Return End If If txtPassword.Text = "" Then MsgBox("密码不能为空!","提示") Return End If '实例化BLL实体,用来对传入的登录信息实体做判断 Dim bLogin As New BLL.bUserLogin '定义一个最终的返回实体returnUserInfo,承接经过D层查询,B层判断的登录信息 Dim returnUserInfo As New Entity.eUserLogin '调用B层中的方法CheckUserInfo returnUserInfo = bLogin.CheckUserInfo(UserInfo) Catch ex As Exception '错误提示 MessageBox.Show(ex.Message.ToString()) End Try End Sub</span> 实体的命名思路:U层实例化一个接收实体,用来存放登录时输入的用户名和密码;由于这个实体承载的信息是全局(我称它为全局实体)故命名上没加前缀,别的层定义实体时,命名规则是:在哪个层定义,前缀就是那个层的首字母。 BLL层
<span style="font-size:18px;">Public Class bUserLogin 'UserInfo用来承载用户登录时输入的用户名和密码,全局实体 Public Function CheckUserInfo(ByVal UserInfo As Entity.eUserLogin) As Entity.eUserLogin '实例化D层 Dim dLogin As New DAL.dUserLogin '定义B层的返回实体 Dim bUserInfo As New Entity.eUserLogin '调用D层中的SelectUserInfo方法 bUserInfo = dLogin.SelectUserInfo(UserInfo) 'If IsNothing(bUserInfo.UserID) Then ' Throw New Exception("登录信息有误,请核实~") If (bUserInfo.UserID Is Nothing Or bUserInfo.PassWord Is Nothing) Then Throw New Exception("用户名或密码错误,请核实~") Else 'MsgBox("登录成功,正在登录系统……") '这样写标签名字就不是BLL了,效果见下图 MsgBox("登录成功,正在登录系统……","提示") Return bUserInfo End If End Function End Class</span>
DAL层SqlHelper,连接数据库的公用字符串:
<span style="font-size:18px;">Imports System.Data Imports System.Data.SqlClient Public Class dSqlHelper Public Shared Function connstring() As String '连接数据库的字符串 connstring = "server=SUN;database=ComputerCharge_sys;uid=sa;pwd=1" End Function End Class</span>数据表T_User_Info如下展示:
正式和数据库打交道
<span style="font-size:18px;">Imports System.Data Imports System.Data.SqlClient Public Class dUserLogin Public Function SelectUserInfo(UserInfo As Entity.eUserLogin) As Entity.eUserLogin '实例化dSqlHelper中的返回字符串,定义连接打开数据库 Dim conn As New SqlConnection(dSqlHelper.connstring) '打开数据库 conn.Open() 'DataReader是一行一行的读取记录的,当记录中有数据时Read(返回True,当到记录集底部时返回False) Dim reader As SqlDataReader 'D层实例化执行查询后的返回实体 Dim dUserInfo As New Entity.eUserLogin '查询语句 Dim sql As String = "Select * from T_User_Info where UserID= @UserID and PassWord=@PassWord" '定义数据库命令,获得SQL语句的具体命令 Dim cmd As New SqlCommand(sql,conn) '********************************************** '这段代码注释了也可以执行 ''获取SQL语句的具体内容() 'cmd.CommandText = sql ''获取上述SQL语句的具体类型,在此为Select 'cmd.CommandType = CommandType.Text '********************************************** cmd.Parameters.Add(New SqlParameter("@UserID",UserInfo.UserID)) cmd.Parameters.Add(New SqlParameter("@PassWord",UserInfo.PassWord)) '执行查询语句,并返回DataReader对象 reader = cmd.ExecuteReader() '读取查询的数据,并返回给相应的属性 While (reader.Read()) '获取数据库中相应字段的数据 dUserInfo.UserID = reader.GetString(0) dUserInfo.PassWord = reader.GetString(1) '下面的代码同功能 'dUserInfo.UserID = reader.GetString(reader.GetOrdinal("UserID")) 'dUserInfo.PassWord = reader.GetString(reader.GetOrdinal("PassWord")) End While '返回查询到的实体 Return dUserInfo '关闭数据库 conn.Close() End Function End Class</span> 总结本人菜鸟一枚,看别人博客的时候,被各种命名整的思维混乱,于是花了点时间构思了一下自己的命名规范,从代码的注释中相信读者可以看出来。 开篇提到,由于对一句代码恍然大悟,所以在原有的三层皮毛知识上树立了自己敲三层的信心,那么是哪句代码呢?这是从UI层摘出来的一句代码:returnUserInfo = bLogin.CheckUserInfo(UserInfo),就是这样的一句,让我瞬间明白了博客中的时序图到底是怎么玩的,同时感慨于实体的伟大之处,真的很像是一辆车,带我们去上学,往返都是它,而且中途不用倒车,贯穿始终~ PS:Demo已经上传到CSDN资源(VB.net版机房收费系统三层登录源代码)上,以飨读者~ 好了,就说到这里,俺老孙去也~ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |