首先在这里祝大家端午节快乐!在三天小长假中,三层的登录实例也完成了。实现过程因为之前敲了一个C#的登录实例,再敲.net版的时候,语法产生混乱,搞不清,不过还好磕磕绊绊也实现了。下面就和大家分享一下。
三层架构,就是将整个业务应用逻辑上划分为:UI(表现层)、 BLL(业务逻辑层)、 DAL(数据访问层)。使用三层的目的就是为了“高内聚,低耦合”的思想。
UI层:为用户提供一个交互式界面,显示和接受用户输入的数据。
BLL层:负责处理业务逻辑。通过获取UI传来的操作指令,决定执行业务逻辑,在需要访问数据源的时候,直接交给DAL处理。之后,返回必要数据给UI.
BLL职责机制:UI→BLL→UI
UI→BLL→DAL→BLL→UI
DAL层:提供基本的数据访问,不包含任何业务相关的逻辑处理。
各层之间的引用关系:DAL不引用BLL和UI;BLL需要引用DAL;UI需要引用BLL,可能会间接引用DAL。
实例:以登录为例,在用户成功登录后,赠送用户10积分,鼓励用户常常使用。
1.首先建立数据库,并配置连接数据库
2.在VS中新建项目:
在这里要注意的是,各层之间的引用关系。其中Model是一个实体类(详解请看)。在这里可以是用类UserInfo来存用户信息。DbUtil是用来存数据库连接字符串的。此处理解有点模糊。
3.代码:
D层:UserDAO
Imports System.Data.SqlClient Public Class UserDAO Public Function SelectUser(ByVal userName As String, ByVal password As String) '具有返回值的函数SelectUser Dim db As New LoginModel.Dbutil Using Conn As New SqlConnection(db.ConnString) Dim cmd As New SqlCommand '定义SqlCommand对象 cmd = Conn.CreateCommand() 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() '打开数据库 Dim reader As SqlDataReader reader = cmd.ExecuteReader() '执行SQL查询并得到结果,返回一个SqlDataReader对象 Dim user As LoginModel.UserInfo '实例化一个LoginModel.UserInfo user = Nothing While (reader.Read()) '读取值 If (user Is Nothing) Then user = New LoginModel.UserInfo() End If user.ID = reader.GetInt32(0) '读取值 user.UserName = reader.GetString(1) user.Password = reader.GetString(2) If (Not reader.IsDBNull(3)) Then user.Email = reader.GetString(3) End If End While Return user End Using End Function End ClassScoreDAO:
<pre name="code" class="vb">Imports System.Data.SqlClient Public Class ScoreDAO Public Sub UpdateScore(ByVal userName As String, ByVal value As Integer) '定义了一个没有返回值的UpdateScore函数 Dim DB As New LoginModel.Dbutil Using conn As New SqlConnection(DB.ConnString) Dim cmd As SqlCommand '定义个SqlCommand对象 cmd = conn.CreateCommand() cmd.CommandText = "Insert into Scores Values('',@UserName,@Score)" '执行SQL插入语句 cmd.Parameters.Add(New SqlParameter("@UserName", userName)) cmd.Parameters.Add(New SqlParameter("@Score", value)) conn.Open() '打开数据库连接 cmd.ExecuteNonQuery() '修改表 End Using End Sub End ClassB层:
Public Class LoginManager Public Function UserLogin(ByVal userName As String, ByVal password As String) As LoginModel.UserInfo '定义了一个搞具有返回值的函数UserLogin Dim uDao As LoginDAL.UserDAO '定义一个LoginDAL.UserDAO的对象 Dim user As LoginModel.UserInfo uDao = New LoginDAL.UserDAO() user = uDao.SelectUser(userName, password) If Not user Is Nothing Then '判断user若不为空的话 Dim sDao As LoginDAL.ScoreDAO sDao = New LoginDAL.ScoreDAO sDao.UpdateScore(userName, 10) '更新数据 Return user '返回 Else Throw New Exception("登录失败") '当用户输入数据错误时,抛出异常 End If End Function End ClassU层:
Public Class Form1 Private Sub btLogin_Click(sender As Object, e As EventArgs) Handles btLogin.Click Dim userName As String Dim password As String Dim mgr As LoginBL.LoginManager '定义一个LoginBlL.LoginManager对象 Dim user As LoginModel.UserInfo '定义一个LoginModel.UserInfo对象 userName = txtUsername.Text.Trim '将用户输入的用户名和密码传给新定义的两个对象 password = txtPassword.Text mgr = New LoginBL.LoginManager user = mgr.UserLogin(userName, password) MessageBox.Show("用户登录成功!") '弹出窗口,提示用户登陆成功 End Sub End Class
Userinfo:
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
Public Class Dbutil Public ConnString As String = "Server=hcy-PC;Database=Login;User ID=sa;Password=123456" ‘连接数据库 End Class
.Net和C#语法结构有不同之处,在实现过程中要认真点,搞懂两者之间的异同,小小的例子学到的不少。接下来的学习继续努力!