VB.NET三层练习---登录实例
上一篇博客写了三层的基础知识,这一篇写写我实践了的一个登录实例。 1.实例业务描述:一个登录界面,通过输入用户名和密码实现登录。如果用户名、密码在数据库Login中的Users表中存在,则表明登录成功,然后在相应的Scores表中增加10个积分;如果登录不成功,则显示“登录失败”。可参考图: 登录界面: users表: scores表: 2.实现过程配置文件配置文件是可以按需要更改的 XML 文件。 开发人员可以使用配置文件来更改设置,而不必重编译应用程序。 管理员可以使用配置文件来设置策略,以便影响应用程序在计算机上运行的方式。这里不多叙述关于配置文件的详细内容,仅给出此实例中应用到的配置文件。 <?xml version="1.0" encoding="utf-8" ?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <appSettings> <clear /> <add key="connString" value="Data Source=192.168.**.**;Initial Catalog=Login;User ID=sa;Password=123456"/> </appSettings> </configuration> Model(实体类)Model对应于users表,用来封装数据,在三层之间传送数据也就是各层之间的函数调用返回值都是user对象。Model独立于其他三个层次,不会引用其他三个程序集,而其他都引用Model。 Public Class UserInfo Private ID As Integer Private UserName As String Private Password As String Private Email As String Public Property _ID As Integer Get Return ID End Get Set(value As Integer) ID = value End Set End Property Public Property _UserName As String Get Return UserName End Get Set(value As String) UserName = value End Set End Property Public Property _Password As String Get Return Password End Get Set(value As String) Password = value End Set End Property Public Property _Email As String Get Return Email End Get Set(value As String) Email = value End Set End Property End Class D层D层中包含了三个类:DBUtil类、UserDAO类、ScoreDAO类。提供基本的数据访问,不包含任何相关的业务处理。 DBUtil类中调用了配置文件: Public Class DBUtil '读取配置文件。 Public Shared strConnection As String = System.Configuration.ConfigurationManager.AppSettings("connString") End Class UserDAO类实现了查询该用户和密码是否存在的功能。 Imports System.Data.SqlClient Imports System.Data Public Class UserDAO Public Function SelectUser(ByVal UserName As String,ByVal Password As String) As LoginModel.UserInfo Using conn As New SqlConnection(DBUtil.strConnection) 'using语句可以确保在范围结束时调动dispose方法释放对象。 Dim cmd As SqlCommand = conn.CreateCommand() '通过Connection的CreateCommand方法创建Command对象 cmd.CommandText = "SELECT ID,UserName,Password,Email FROM USERS WHERE UserName=@UserName AND Password=@Password" cmd.CommandType = CommandType.Text cmd.Parameters.Add(New SqlParameter("@UserName",UserName)) '添加参数@UserName cmd.Parameters.Add(New SqlParameter("@Password",Password)) '添加参数@Password conn.Open() Dim user As LoginModel.UserInfo = Nothing Dim reader As SqlDataReader = cmd.ExecuteReader() '通过Command对象的ExecuteReader方法创建sqlDataReader对象 While (reader.Read()) '若reader中没有记录返回false则退出循环,若有记录则读入user内。 If user Is Nothing Then user = New LoginModel.UserInfo End If user._ID = reader.GetInt32(0) '将字段依次读入user的属性中。 user._UserName = reader.GetString(1) user._Password = reader.GetString(2) If user._Email Is DBNull.Value = False Then 'DBNUll函数可以判断读出的是否为空。 user._Email = reader.GetString(3) End If End While Return user End Using End Function End Class ScoreDAO类实现了增加积分的功能。 Imports System.Data.SqlClient Public Class ScoreDAO Public Sub UpdateScore(ByVal UserName As String,ByVal value As Integer) Using conn As New SqlConnection(DBUtil.strConnection) 'using语句可以确保在范围结束时调动dispose方法释放对象。 Dim cmd As SqlCommand = conn.CreateCommand() '通过Connection的CreateCommand方法创建Command对象 cmd.CommandText = "INSERT INTO SCORES(UserName,Score) values(@UserName,@Score)" cmd.Parameters.Add(New SqlParameter("@UserName",UserName)) cmd.Parameters.Add(New SqlParameter("@Score",value)) conn.Open() cmd.ExecuteNonQuery() '执行TSQL语句。 End Using End Sub End Class B层负责处理业务逻辑。通过获取UI传来的指令,决定执行业务逻辑UserLogin,在需要访问数据源的时候(Select和Update)直接交给DAL处理,处理完成后,返回必要数据给UI。 Public Class LoginManager Public Function UserLogin(ByVal UserName As String,ByVal Password As String) As LoginModel.UserInfo Dim uDao As New LoginDAL.UserDAO Dim user As New LoginModel.UserInfo user = uDao.SelectUser(UserName,Password) If user IsNot Nothing Then 'user不为空说明查询到用户存在,登录成功。 Dim sDao As New LoginDAL.ScoreDAO sDao.UpdateScore(UserName,10) End If Return user End Function End Class U层主要就是界面,以及负责采集和显示用户操作 Public Class Form1 Private Sub btnLogin_Click(sender As Object,e As EventArgs) Handles btnLogin.Click Dim userName As String = txtUserName.Text.Trim() Dim password As String = txtPassword.Text Dim user As New LoginModel.UserInfo Dim mgr As New LoginBLL.LoginManager user = mgr.UserLogin(userName,password) If user IsNot Nothing Then MsgBox("登录成功:" + userName) Else MsgBox("登录失败") End If End Sub End Class 3.总结通过几遍实践这个小例子,对三层的架构思想理解更进了一步。当然我觉得要是再深入理解,还得需要再实践其他项目。期待下一个项目机房收费系统个人重构的开始。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |