三层架构实例 VB.NET版
三层实例
首先发现感慨,对于三成这块,用到都是一些面向对象的特征,尤其是对象的实例化。如果你不是很注意的话,那么,你就会一头雾水,就像我一样,慢慢的雾里看花,最后也是走出来的,不过用的事件是相当的。
对象的实例,vb.net 和C#是很好的选择。这里我先是用了c#,然后用的vb.net,它们的一些语法是有些不同的,声明,c#直接是在前声明, erVB.Net是在后声明,是类名称或类型在后紧跟。
然后说的一点就是命名空间的引用,出入不是很大,
Using 加核心命名为C#专用 ,imports +核心命名为vb.net的专用
当然也少不了添加引用了。
对于期间用到的数组和配置文件,这里不详细说明了。
简单说下配置文件。
两者的配置文件出入很小。
1. appSettings配置节
- <!--数据库连接串-->
- <?xmlversionxmlversion="1.0"encoding="utf-8" ?>
- <configuration>
- <startup>
- <supportedRuntimeversionsupportedRuntimeversion="v4.0"sku=".NETFramework,Version=v4.5" />
- </startup>
- <appSettings>
- <clear/>
- <add key="connString"value="server=192.168.**.***;database=ThreeLayersSystem;uid=sa;password=123456;"/>
- </appSettings>
- </configuration>
注意这里的 KEY 和Value 是 对应出现的, 这个是远程反问数据库的实例 。
2 connectionStrings配置节:
- <?xmlversionxmlversion="1.0"encoding="utf-8" ?>
- <configuration>
- <startup>
- <supportedRuntimeversionsupportedRuntimeversion="v4.0"sku=".NETFramework,Version=v4.5" />
- </startup>
- <connectionStrings>
- <clear />
- <add name="ConnectionStrings"connectionString="Data Source=192.168.**.***; DataBase=ThreeLayersSystem; User ID=sa; Password=123456"/>
- </connectionStrings>
- </configuration>
两者差别几乎很小。
下面说下具体的实例如果建造的
首先建立空白解决方案。

之后建立各层
依次为 添加新项目
表现层(windos窗体),业务逻辑层(类库),数据访问层(类库),实体层(类库)
然后添加各层之间的引用
表现层添加业务逻辑层和实体层
业务逻辑添加数据访问层和实体层
数据访问层添加实体层。
D层还要添加一个为 system.configuration的引用,是对配置文件的引用
下面为具体实例代码了,为VB.NET的代码示例
表现层为UI 代码如下
集中配置文件在U层,为开始的appsettings
以下为windos
窗体的代码
导入引用
- Imports CBLL
- Imports Model
- Public class form1
- PrivateSub cmdOk_Click(sender AsObject, e AsEventArgs) Handles cmdOk.Click
- Me.Login(txtUid.Text, txtPwd.Text)
- EndSub
- ''传递参数,并接受返回的参数
- Private usermanager AsNew BLL.Bll
- PublicSub Login(ByVal userID AsString, ByVal userPwd AsString)
- Dim equal AsStatus = usermanager.userManger(userID, userPwd)
- If (equal = Status.success) Then
- Dispose(userID)
- Me.Close()
- ElseIf (equal = Status.fail) Then
- MsgBox("用户名或密码错误")
- EndIf
- EndSub
- End class
业务逻辑层代码
- Imports DAL
- Imports System.Data.SqlClient
- Imports Model
- Namespace CBLL
- Public Class Bll
- '一个方法有几个返回值,几个参数,取决于界面层调用什么东西,也就是需求
- '新建返回为枚举类型的函数
- '对表现层传递的值进行判断,
- '验证成功与否,进行枚举判断。
- Public Function userManger(userID As String, userPwd As String) As Boolean
- Dim userDAL As New DAL.Dal
- Dim userinfo As New User
- userinfo = userDAL.Query(userID, userPwd)
- '判断密码和数据库的一样为true,否则为fail
- If (userinfo._userID <> userID Or userinfo._userPwd <> userPwd) Then
- Return False
- Else
- Return True
- End If
- End Function
- End Class
- End Namespace
数据访问层
- Imports Model
- Imports System.Data.SqlClient
- Imports System.Configuration
- Imports System
- Public Class Dal
- '定义私有变量
- Private userinfo AsnewUser
- Private rs As SqlClient.SqlDataReader
- Private conn As SqlClient.SqlConnection
- Private com As SqlClient.SqlCommand
- Private strConnection AsString
- '执行连接字符串,这里用到的是配置文件。
- PublicSubNew()
- conn = New SqlClient.SqlConnection
- strConnection = System.Configuration.ConfigurationManager.AppSettings("connString")
- conn.ConnectionString = strConnection
- Try
- conn.Open()
- Console.WriteLine("数据测试成功")
- Catch ex AsException
- Throw ex
- Finally
- 'conn.Close()
- EndTry
- EndSub
- PublicFunction Query(ByVal userID AsString, ByVal userPwd AsString) AsUser
- '查询用户信息并返回用户信息
- com = New SqlClient.SqlCommand("select * from T_User where userID='" + userID + "'and userPwd='" + userPwd + "'", conn)
- Try
- rs = com.ExecuteReader()
- While (rs.Read)
- userinfo._userID = rs.Item("userID")
- userinfo._userPwd = rs.Item("userPwd")
- EndWhile
- Return userinfo
- Catch ex AsException
- Throw ex
- Finally
- If Not IsNothing(conn) Then
- 'Close()
- EndIf
- EndTry
- EndFunction
- EndClass
实体 层 一个为数据库对应的字段,User类
- Imports System.Data
- Imports System.Data.SqlClient
- Imports System.Configuration
- Imports Model.Status
- PublicClassUser
- #Region"定义user表中各个属性变量"
- Private userID AsString''用户ID
- Private userPwd AsString''用户密码
- Private userName AsString''用户名
- #EndRegion
- #Region"获取数据库的变量"
- PublicProperty _userID AsString
- Get
- Return userID
- EndGet
- Set(value AsString)
- userID = value
- EndSet
- EndProperty
- PublicProperty UserState AsStatus
- Get
- Return state
- EndGet
- Set(value AsStatus)
- state = value
- EndSet
- EndProperty
- PublicProperty _userPwd AsString
- Get
- Return userPwd
- EndGet
- Set(value AsString)
- userPwd = value
- EndSet
- EndProperty
- #EndRegion
- EndClass
三层架构实例 VB.NET版的更多相关文章
- 三层登录实例VB.NET版详解---理论加实战篇
		层,百度百科这样解释,首先-重叠起来的东西:重叠起来的东西中的一部分:层次|表层|大气层.其次-重叠:重复:层峦叠嶂|层出不穷.最后-量词,用于可以分出层次的事物,女孩儿强烈的第六感,三层中的层一定是 ... 
- 三层登录实例VB.NET版具体解释---理论加实战篇
		层,百度百科这样解释,首先-重叠起来的东西:重叠起来的东西中的一部分:层次|表层|大气层.其次-重叠.反复:层峦叠嶂|层出不穷.最后-量词,用于能够分出层次的事物.女孩儿强烈的第六感,三层中的层一定是 ... 
- JavaWeb学习之三层架构实例(三)
		引言 通过上一篇博客JavaWeb学习之三层架构实例(二)我们基本上已经实现了对学生信息列表的增删改查操作(UI除外),但是不难看出,代码冗余度太高了,尤其是StudentDao这个类,其中的增删改查 ... 
- JavaWeb学习之三层架构实例(二)
		引言 这个实例是上一个实例JavaWeb学习 三层架构实例(一)的加强版,实现的是在前端对数据库中student表的 增.删.改.查 操作.关于三层组成云云,这里就不再叙述. 实例 效果图 先来看一下 ... 
- java:Session(概述,三层架构实例(实现接口封装JDBC),Session实现简单购物车实例)
		1.Session概述: Session:在计算机中,尤其是在网络应用中,称为“会话控制”.Session 对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序的 Web 页之间跳转时,存 ... 
- 简单的web三层架构系统【第二版】
		昨天写了 web三层架构的第一版,准确的说是三层架构的前期,顶多算是个二层架构,要慢慢完善. 第一版里,程序虽说能运行起来,但是有一个缺陷,就是里面的SQL语句,是使用的拼接字符进行执行.这样安全系数 ... 
- C# 使用三层架构实例演示-winForm 窗体登录功能
		---------------------------------------------------------------------------------------------------华 ... 
- C#三层架构实例
		对于三层的概念查也查了,看也看了,下面是我找的一个关于三层的简单实例,真正看一下它是如何具体实现的. 我们先来一起看看 实体类-Model 实质:实体类就是在完成数据库与实体类对应的功能,一个类是一张 ... 
- SSH框架整合实现Java三层架构实例(一)
		HTML前台发送请求代码: <tr> <td>选择收派时间</td> <td> <input type="text" name ... 
随机推荐
- PHP+redis实现超迷你全文检索
			2014年10月31日 11:45:39 情景: 我们平台有好多游戏, 运营的同事在查询某一款游戏的时候, 目前使用的是html的select下拉列表的展现形式, 运营的同事得一个个去找,然后选中,耗 ... 
- hdu 1098 Lowest Bit 解题报告
			题目链接:http://code.hdu.edu.cn/game/entry/problem/show.php?chapterid=1§ionid=2&problemid=22 ... 
- Light OJ 1199  - Partitioning Game (博弈sg函数)
			D - Partitioning Game Time Limit:4000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu ... 
- linux常见问题集锦-2
			http://zhangge.net/1986.html 在此感谢作者分享 1.linux如何挂在windows下的共享目录 Shell 1 mount.cifs //192.168.1.3/serv ... 
- centos  截图命令  screenshot
			[root@ok ~]# gnome-screenshot#全屏截图 [root@ok ~]# gnome-screenshot --interactive#自定义截图 
- Java内存访问重排序笔记
			>>关于重排序 重排序通常是编译器或运行时环境为了优化程序性能而采取的对指令进行重新排序执行的一种手段. 重排序分为两类:编译期重排序和运行期重排序,分别对应编译时和运行时环境. > ... 
- js checkbox
			js checkbox <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:/ ... 
- PHP单引号和双引号的区别
			单引号和双引号的区别 .双引号 里的东西 输入的时候能判断是否 包含 变量,如果包含 变量 就一起输出 .单引号里的就不一样,不判断是否有变量,就全部当成 字符串 输出 .单引号解析的时间比双引号快 ... 
- 使用MyEclipse Swing/Matisse
			经常使用JBuilder开发工具的人都知道,在JBuilder中开发Swing应用程序是比较方便的,虽然比不上曾经红遍一时的Visual Basic,但开发界面的工作确实被大大简化了. JB ... 
- 【jacob   word】使用jacob,合并多个word为一个word文件
			将几个word文件合并到一个word文件,使用注意点: 1.后面附项目运用的jar包jacob-1.9, 2.并且jacob运用中,需要将附件内的jacob.dll放到windows/system32 ... 
