首先在这里祝大家端午节快乐!在三天小长假中,三层的登录实例也完成了。实现过程因为之前敲了一个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 Class
ScoreDAO:
<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 Class
B层:
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 Class
U层:
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
Model:
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
DbUtil:
Public Class Dbutil
Public ConnString As String = "Server=hcy-PC;Database=Login;User ID=sa;Password=123456" ‘连接数据库
End Class
至此,实例完成。
.Net和C#语法结构有不同之处,在实现过程中要认真点,搞懂两者之间的异同,小小的例子学到的不少。接下来的学习继续努力!