看三层已经很长时间了,中间有经过了期末考试、回家等等琐事,寒假开学的我已经回想不起什么事三层了,经过了三四天的重新复习,再加上查看各期师哥师姐的博客,终于,自己完成了C#视频中的登录小例子,下面就和大家分享一下先:

首先是界面:

这样感觉真心的好看

首先我们看一下实体层,也就是图片中的LoginModel

Public Class Model
Dim _username As String
Dim _password As String
Dim _email As String
Dim _score As Integer Public Property UserName As String '设置UserName属性
Get
Return _username
End Get
Set(value As String)
_username = value
End Set
End Property Public Property Password As String '设置Password属性
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

D层

Public Class UserDAO

    Public conn As New SqlConnection("server=李卫中; database=Login;user id=sa;password=li")
Public Function SelectUser(ByVal User As Model) As LoginModel.Model
Dim reader As SqlDataReader
Dim eUser As New LoginModel.Model Dim sql As String = "Select UserName,Password From Users Where UserName=@UserName And Password=@Password"
Dim cmd As New SqlCommand(sql, conn) '创建sqlCommand对象
cmd.CommandText = sql '获取SQL语句的具体内容
cmd.CommandType = CommandType.Text '获取上述SQL语句的具体类型,在此为Select
cmd.Parameters.Add(New SqlParameter("@UserName", User.UserName)) '若用成eUser.UserName则会出现参数未传递的错误提示
cmd.Parameters.Add(New SqlParameter("@Password", User.Password)) conn.Open() '打开数据连接
reader = cmd.ExecuteReader() '执行查询语句,并生成一个DataReader '读取查询到的数据,并返回给相应的属性
While reader.Read()
'获取数据库中相应字段的数据
'数组必须从零开始读取,否则会超出其界限
eUser.UserName = reader.GetString(0)
eUser.Password = reader.GetString(1)
End While
Return eUser '返回查询到的实体
conn.Close()
End Function
Public Class ScoresDAO                  '这里是实例中的那个登录见证,也就是Score那部分,其实我是照葫芦画瓢,照上面写的
Public conn As New SqlConnection("server=李卫中; database=Login;user id=sa;password=li")
Public Function UpdateScore(ByVal User As Model) As LoginModel.Model
Dim eUser As New LoginModel.Model
Dim sql As String = "INSERT INTO Scores (UserName,Score) values (@UserName,@Score)"
Dim cmd As New SqlCommand(sql, conn) '创建sqlCommand对象
cmd.CommandText = sql '获取SQL语句的具体内容
cmd.CommandType = CommandType.Text '获取上述SQL语句的具体类型,在此为Select
cmd.Parameters.Add(New SqlParameter("@UserName", User.UserName))
cmd.Parameters.Add(New SqlParameter("@Score", 10))
conn.Open() cmd.ExecuteNonQuery() Return eUser '返回查询到的实体
conn.Close() '视频里讲过,用完了之后,最好是断开连接,省的占用通道 '关闭连接
End Function End Class

至于这里,写完之后,看到了慕夏师傅师傅的博客,知道了,应该向C#中一样,讲数据库连接字符串单独提出来,这样,就不用每次都写,见谅



U层:界面层

Public Class frmLogin

    Private Sub frmLogin_Load(sender As Object, e As EventArgs) Handles MyBase.Load
txtUserName.Focus()
txtUserName.MaxLength = 11 '设置txtUserName 属性
txtPassword.MaxLength = 10
End Sub Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
Try Dim euser2 As New LoginModel.Model '实例化新的UserInfo,用来传递B层的实体
Dim euser3 As LoginModel.Model '定义一个类型为UserInfo的参数,用来赋值 '用户名、密码传入实体层
euser2.UserName = Trim(txtUserName.Text)
euser2.Password = txtPassword.Text Dim mgr As New LoginBLL.LoginManager
euser3 = mgr.UserLogin(euser2)
Catch ex As Exception
MessageBox.Show(ex.Message.ToString())
End Try End Sub Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
Me.Close()
End Sub
End Class

B层:业务逻辑层

 

Public Function UserLogin(ByVal User As LoginModel.Model) As LoginModel.Model
Dim uDao As New LoginDAL.UserDAO
Dim sDao As New LoginDAL.ScoresDAO
Dim eUser1 As LoginModel.Model eUser1 = uDao.SelectUser(User) If IsNothing(eUser1.UserName) Then
Throw New Exception("密码错误或用户名不存在,登录失败")
Else
eUser1 = sDao.UpdateScore(User) Return eUser1
End If
End Function

自己编点,看看师哥师姐们的博客,结合一下自己以前学到的知识,要知道,所谓的三层其实就是一个解耦的过程,和我们后面遇到的“七层”是一样,用心看看,应该不难

从上面可以看出,我用到的是传实体,之前我问过师傅,到底是传实体好呢,还是传参好呢?(各有各的好处,不同的地方、不同的情况用不同的发放)这是师傅对我说的,虽然我还不能完全掌握使用方法的能力,但是通过练习,我没问题

vb.net三层实现登录例子的更多相关文章

  1. delphi 三层架构简单例子(经测试成功)

    delphi 三层架构简单例子(经测试成功) 转载 2013年12月19日 09:48:57 1100 所谓三层: (1) 客户端 (2) 服务器端 (3) 数据库 在数据访问时,使得客户端必须通过服 ...

  2. python 全栈开发,Day119(Flask初识,Render Redirect HttpResponse,request,模板语言 Jinja2,用户登录例子,内置Session)

    一.Flask初识 首先,要看你学没学过Django 如果学过Django 的同学,请从头看到尾,如果没有学过Django的同学,并且不想学习Django的同学,轻饶过第一部分 三大主流Web框架对比 ...

  3. WinForm(VB.NET)获取当前登录的用户名

    运行Windows Task Manager,查看Users标签,可以看到所有登录电脑的用户,现在Insus.NET想命名用VB.NET的WinForm程序去获取当前的用户名. 获取程序简单,可以参考 ...

  4. js DOM操作---登录例子总结

    简单的总结下用 javascript DOM 实现简易登录框例子,下面是简单的模拟登录,没有具体的登录样子,但只是模拟,整理下思路. 页面简单布局,我这个确实太简单了,看代码: <body> ...

  5. hashlib 简单的登录例子

    hashlib例子: =============================================== import hashlib md5 = hashlib.md5() md5.up ...

  6. 用Struts2搭建一个登录例子【本人亲测好用】

    今天尝试struts2的搭建,遇到不少的问题,终于一一解决,逛了很多地方,最终完成搭建 1.首先要下载struts2的一些组件,我下载的是版本2.3.4.1,Eclipse是4.6版本的.由于版本的不 ...

  7. PHP验证用户登录例子-学习笔记

    1.基本流程: 2.UML类图: 3.PHP代码: 3.1 index.php <?php /** * Created by PhpStorm. * User: andy * Date: 16- ...

  8. SpringMVC---简单登录例子

    所需jar包aopalliance-1.0.jar.commons-logging-1.2.jar.spring-aop-5.0.0.RELEASE.jar.spring-beans-5.0.0.RE ...

  9. VB.NET+三层 机房收费系统之组合查询

    关系组合查询已经用去了4天的时间.每天都在痛苦中煎熬,绞尽脑汁,一句代码都要瞪大眼睛看好长时间,有时候.由于两句话颠倒了.就nothing了:有时候,由于table如何可以转换成实体类型.将自己困住了 ...

随机推荐

  1. Component creation must be done on Event Dispatch Thread错误解决方法

    在用java swing 做例子,给页面设置皮肤样式的时候出现了这个错误: org.jvnet.substance.api.UiThreadingViolationException: Compone ...

  2. [Asp.Net]状态管理(Session、Application、Cache)

    上篇博文介绍了在客户端状态管理的两种方式:http://www.cnblogs.com/wolf-sun/p/3329773.html.除了在客户端上保存状态外,还可以在服务器上保存状态.使用客户端的 ...

  3. c语言中的fgets函数

    fgets()函数用于从文件流中读取一行或指定个数的字符,其原型为: char * fgets(char * string, int size, FILE * stream); 参数说明:string ...

  4. thinkphp中limit方法

    limit方法也是模型类的连贯操作方法之一,主要用于指定查询和操作的数量,特别在分页查询的时候使用较多.ThinkPHP的limit方法可以兼容所有的数据库驱动类的. 用法 限制结果数量 例如获取满足 ...

  5. java笔记--关于克隆技术

    关于克隆 --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3884817.html"谢谢-- 1.假克隆 如: ObjectA ...

  6. Java修改数组长度

    java中没有关于修改数组长度的api,在此本人提供了修改数组长度的两个函数:arrayAddLength()和arrayReduceLength().详细见代码.  [java] view plai ...

  7. Ubuntu上安装gtk2.0不能安装的问题,“下列的软件包有不能满足的依赖关系”

    zez@localhoss:~$ sudo apt-get install libgtk2.0-dev正在读取软件包列表... 完成正在分析软件包的依赖关系树       正在读取状态信息... 完成 ...

  8. Java正则表达式的最简单应用

    String emailRegex = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$"; Pattern pat = ...

  9. 【Python】python 普通继承方式和super继承方式

    Python中对象方法的定义很怪异,第一个参数一般都命名为self(相当于其它语言的this),用于传递对象本身,而在调用的时候则不必显式传递,系统会自动传递.举一个很常见的例子:>>&g ...

  10. Plus One Linked List

    Given a non-negative number represented as a singly linked list of digits, plus one to the number. T ...