看三层已经很长时间了,中间有经过了期末考试、回家等等琐事,寒假开学的我已经回想不起什么事三层了,经过了三四天的重新复习,再加上查看各期师哥师姐的博客,终于,自己完成了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. c#接口和抽象类对比学习

    什么是接口? 接口就是一种规范,协议(*),约定好遵守某种规范就可以写通用的代码. 定义了一组具有各种功能的方法.接口描述的是一种能力,具有这种能力的事物可以没任何关系.比如: public inte ...

  2. linux挂载硬盘失败,报错!

    剛把我的一顆硬碟 ( NTFS ) 接到 Ubuntu 桌機上. 然後要 mount  的時候,出現了下面的訊息: DBus error org.gtk.Private.RemoteVolumeMon ...

  3. [整理]Web应用安全学习

    最近在复习TCP/IP相关知识,同时也想对网络安全相关的知识进行系统的补漏. 阅读了一些常见的关于XSS.CSRF等的一些网上文章: http://www.cnblogs.com/luminji/ca ...

  4. thinkphp中limit方法

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

  5. To the Max

    To the Max --------------------------------------------------------------------------------Time Limi ...

  6. Window 常用命令

    Window 常用命令   Ctrl +alt +delete 切换用户 Ctrl +shift+esc 启动任务管理

  7. Python文件基础

    ===========Python文件基础========= 写,先写在了IO buffer了,所以要及时保存 关闭.关闭会自动保存. file.close() 读取全部文件内容用read,读取一行用 ...

  8. [Effective JavaScript 笔记]第48条:避免在枚举期间修改对象

    注册列表示例 一个社交网络有一组成员,每个成员有一个存储其朋友信息的注册列表. function Member(name){ this.name=name; this.friends=[]; } va ...

  9. MySQL数据库服务器的架设

    导读 MySQL数据库是Linux操作系统上用得最多的数据库系统,它可以非常方便的与其它服务器集成在一起,如Apache.Vsftpd.Postfix等.下面介绍RHEL 6平台MySQL数据库服务器 ...

  10. Linux 守护进程和超级守护进程(xinetd)

    一 .Linux守护进程 Linux 服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户.提供这些服务的程序是由运行在后台的守护进程来执行的 ...