背景:真是欠的债迟早都要还。因为期末那段时间自己看视频的时候没有好好理解看着人家的代码就照敲,导致这次自己用VB.NET实现三层的时候遇到各种问题。
最大的问题:三层里面U层还有D层每层都有自己的实体,而且数量还不少。这也就罢了,可是他们三层之间需要通过实体实现沟通,这样调用哪个实体或者参数的问题就来了。此外他们是如何进行沟通的呢?
经过这几天的琢磨,三层的思想我才渐渐地领悟。原来他们之间的沟通就是通过实体调用各层的方法来实现的。而在参数这一块,
光说不练假把式,下面看看我VB.NET版本的三层登录吧。
先让我们看看U层的代码
Imports Model Imports BLL Public Class UI Private Sub Button1_Click(sender As Object,e As EventArgs) Handles btnOK.Click Dim User As New Model.usermodel '用来接收用户输入的用户名还有密码 Dim UserB As Model.usermodel '用来接收B层返回的值 User.UserName = txtUserName.Text User.Password = txtPassword.Text Dim mrg As New BLL.LoginBll() '实例化B层登录的一个类 UserB = mrg.UserLogin(User) '调用B层的方法C传递User,并且将B层返回的值赋给UserB If UserB.UserName Is nothing Then MessageBox.Show("登录失败") Else MessageBox.Show("登录成功" + User.UserName) End If Return End Sub End Class
<span style="font-family: Arial,Helvetica,sans-serif; background-color: rgb(255,255,255);">接下来看看B层的</span>
Imports Model Imports DLL.UserD Public Class LoginBll Public Function UserLogin(ByVal User As usermodel) As Model.usermodel '这里的usermodel指的是User参数返回值的类型。 Dim users As New usermodel Dim UserD As New DLL.UserD users = UserD.SelectUser(User) If users.Password Is nothing Then Throw New Exception("登录失败") End If Return users End Function End Class
接下来就是D层的
首先是数据库连接的类
Public Class DataCon Public Shared Function connstring() As String connstring = "Server=.;Database=Login;User ID=sa;Password=123" End Function End Class
Imports System.Data Imports System.Data.sqlClient Imports Model Public Class UserD Public Function SelectUser(ByVal User As usermodel) As usermodel Dim connd As New sqlConnection '实例化一个sql类型的连接 Dim cmd As New sqlCommand '实例化一个sql命令(包括增删改查) connd = New sqlConnection(DataCon.connstring) 'connd调用数据库连接方法 cmd.Connection = connd '指定cmd的连接 cmd.CommandText = "select * from Users Where UserName=@UserName and Password=@Password" '指定cmd命令的类容 cmd.Parameters.Add(New sqlParameter("@UserName",User.UserName)) cmd.Parameters.Add(New sqlParameter("@Password",User.Password)) cmd.CommandType = CommandType.Text connd.open() Dim reader As sqlClient.sqlDataReader '定义一个Reader用来保存查询结果 reader = cmd.ExecuteReader() Dim UserD As New Model.usermodel '定义一个UserD来保存Reader的结果 While (reader.Read()) If (UserD) Is nothing Then UserD = New usermodel End If UserD.UserName = reader.GetString(1) UserD.Password = reader.GetString(2) End While connd.Close() Return UserD '返回UserD给B层然后进行判断。 End Function End Class
跟这些相比实体层就比较简单了。
Public Class usermodel Public _userName As String Public Property UserName() As String Get Return _userName End Get Set(ByVal value As String) _userName = value End Set End Property Public _password As String Public Property Password() As String Get Return _password End Get Set(ByVal value As String) _password = value End Set End Property End Class
反思:东西多了看着就觉得很复杂,若是你在敲三层的时候也和我一样遇到类似的问题,建议你先多多调试成功的三层代码看看他们一步步是如何实现的,然后自己可以先敲U层和B层。现在回头来看三层,就觉得他是打包好了三个类模板,他们之间的沟通主要就是实体的方法调用来实现。
原文地址:https://www.jb51.cc/vb/257574.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。