三层实例

首先发现感慨,对于三成这块,用到都是一些面向对象的特征,尤其是对象的实例化。如果你不是很注意的话,那么,你就会一头雾水,就像我一样,慢慢的雾里看花,最后也是走出来的,不过用的事件是相当的。

对象的实例,vb.net 和C#是很好的选择。这里我先是用了c#,然后用的vb.net,它们的一些语法是有些不同的,声明,c#直接是在前声明, erVB.Net是在后声明,是类名称或类型在后紧跟。

然后说的一点就是命名空间的引用,出入不是很大,

Using 加核心命名为C#专用 ,imports +核心命名为vb.net的专用

当然也少不了添加引用了。

对于期间用到的数组和配置文件,这里不详细说明了。

简单说下配置文件。

两者的配置文件出入很小。

1. appSettings配置节

  1. <!--数据库连接串-->
  2. <?xmlversionxmlversion="1.0"encoding="utf-8" ?>
  3. <configuration>
  4. <startup>
  5. <supportedRuntimeversionsupportedRuntimeversion="v4.0"sku=".NETFramework,Version=v4.5" />
  6. </startup>
  7. <appSettings>
  8. <clear/>
  9. <add key="connString"value="server=192.168.**.***;database=ThreeLayersSystem;uid=sa;password=123456;"/>
  10. </appSettings>
  11. </configuration>

注意这里的 KEY 和Value 是 对应出现的, 这个是远程反问数据库的实例 。

 

2 connectionStrings配置节:

  1. <?xmlversionxmlversion="1.0"encoding="utf-8" ?>
  2. <configuration>
  3. <startup>
  4. <supportedRuntimeversionsupportedRuntimeversion="v4.0"sku=".NETFramework,Version=v4.5" />
  5. </startup>
  6. <connectionStrings>
  7. <clear />
  8. <add name="ConnectionStrings"connectionString="Data Source=192.168.**.***; DataBase=ThreeLayersSystem; User ID=sa; Password=123456"/>
  9. </connectionStrings>
  10. </configuration>

两者差别几乎很小。

下面说下具体的实例如果建造的

首先建立空白解决方案。

之后建立各层

依次为  添加新项目

表现层(windos窗体),业务逻辑层(类库),数据访问层(类库),实体层(类库)

 然后添加各层之间的引用

 

 表现层添加业务逻辑层和实体层

 

业务逻辑添加数据访问层和实体层

 

 数据访问层添加实体层。

D层还要添加一个为 system.configuration的引用,是对配置文件的引用

下面为具体实例代码了,为VB.NET的代码示例

表现层为UI 代码如下

集中配置文件在U层,为开始的appsettings

以下为windos
窗体的代码

导入引用

  1. Imports CBLL
  2. Imports Model
  3. Public class form1
  4. PrivateSub cmdOk_Click(sender AsObject, e AsEventArgs) Handles cmdOk.Click
  5. Me.Login(txtUid.Text, txtPwd.Text)
  6. EndSub
  7. ''传递参数,并接受返回的参数
  8. Private usermanager AsNew BLL.Bll
  9. PublicSub Login(ByVal userID AsString, ByVal userPwd AsString)
  10. Dim equal AsStatus = usermanager.userManger(userID, userPwd)
  11. If (equal = Status.success) Then
  12. Dispose(userID)
  13. Me.Close()
  14. ElseIf (equal = Status.fail) Then
  15. MsgBox("用户名或密码错误")
  16. EndIf
  17. EndSub
  18. End class

业务逻辑层代码

  1. Imports DAL
  2. Imports System.Data.SqlClient
  3. Imports Model
  4. Namespace CBLL
  5. Public Class Bll
  6. '一个方法有几个返回值,几个参数,取决于界面层调用什么东西,也就是需求
  7. '新建返回为枚举类型的函数
  8. '对表现层传递的值进行判断,
  9. '验证成功与否,进行枚举判断。
  10. Public Function userManger(userID As String, userPwd As String) As Boolean
  11. Dim userDAL As New DAL.Dal
  12. Dim userinfo As New User
  13. userinfo = userDAL.Query(userID, userPwd)
  14. '判断密码和数据库的一样为true,否则为fail
  15. If (userinfo._userID <> userID Or userinfo._userPwd <> userPwd) Then
  16. Return False
  17. Else
  18. Return True
  19. End If
  20. End Function
  21. End Class
  22. End Namespace

数据访问层

  1. Imports Model
  2. Imports System.Data.SqlClient
  3. Imports System.Configuration
  4. Imports System
  5. Public Class Dal
  6. '定义私有变量
  7. Private userinfo AsnewUser
  8. Private rs As SqlClient.SqlDataReader
  9. Private conn As SqlClient.SqlConnection
  10. Private com As SqlClient.SqlCommand
  11. Private strConnection AsString
  12. '执行连接字符串,这里用到的是配置文件。
  13. PublicSubNew()
  14. conn = New SqlClient.SqlConnection
  15. strConnection = System.Configuration.ConfigurationManager.AppSettings("connString")
  16. conn.ConnectionString = strConnection
  17. Try
  18. conn.Open()
  19. Console.WriteLine("数据测试成功")
  20. Catch ex AsException
  21. Throw ex
  22. Finally
  23. 'conn.Close()
  24. EndTry
  25. EndSub
  26. PublicFunction Query(ByVal userID AsString, ByVal userPwd AsString) AsUser
  27. '查询用户信息并返回用户信息
  28. com = New SqlClient.SqlCommand("select * from T_User where userID='" + userID + "'and userPwd='" + userPwd + "'", conn)
  29. Try
  30. rs = com.ExecuteReader()
  31. While (rs.Read)
  32. userinfo._userID = rs.Item("userID")
  33. userinfo._userPwd = rs.Item("userPwd")
  34. EndWhile
  35. Return userinfo
  36. Catch ex AsException
  37. Throw ex
  38. Finally
  39. If Not IsNothing(conn) Then
  40. 'Close()
  41. EndIf
  42. EndTry
  43. EndFunction
  44. EndClass

实体 层  一个为数据库对应的字段,User类

    1. Imports System.Data
    2. Imports System.Data.SqlClient
    3. Imports System.Configuration
    4. Imports Model.Status
    5. PublicClassUser
    6. #Region"定义user表中各个属性变量"
    7. Private userID AsString''用户ID
    8. Private userPwd AsString''用户密码
    9. Private userName AsString''用户名
    10. #EndRegion
    11. #Region"获取数据库的变量"
    12. PublicProperty _userID AsString
    13. Get
    14. Return userID
    15. EndGet
    16. Set(value AsString)
    17. userID = value
    18. EndSet
    19. EndProperty
    20. PublicProperty UserState AsStatus
    21. Get
    22. Return state
    23. EndGet
    24. Set(value AsStatus)
    25. state = value
    26. EndSet
    27. EndProperty
    28. PublicProperty _userPwd AsString
    29. Get
    30. Return userPwd
    31. EndGet
    32. Set(value AsString)
    33. userPwd = value
    34. EndSet
    35. EndProperty
    36. #EndRegion
    37. EndClass

三层架构实例 VB.NET版的更多相关文章

  1. 三层登录实例VB.NET版详解---理论加实战篇

    层,百度百科这样解释,首先-重叠起来的东西:重叠起来的东西中的一部分:层次|表层|大气层.其次-重叠:重复:层峦叠嶂|层出不穷.最后-量词,用于可以分出层次的事物,女孩儿强烈的第六感,三层中的层一定是 ...

  2. 三层登录实例VB.NET版具体解释---理论加实战篇

    层,百度百科这样解释,首先-重叠起来的东西:重叠起来的东西中的一部分:层次|表层|大气层.其次-重叠.反复:层峦叠嶂|层出不穷.最后-量词,用于能够分出层次的事物.女孩儿强烈的第六感,三层中的层一定是 ...

  3. JavaWeb学习之三层架构实例(三)

    引言 通过上一篇博客JavaWeb学习之三层架构实例(二)我们基本上已经实现了对学生信息列表的增删改查操作(UI除外),但是不难看出,代码冗余度太高了,尤其是StudentDao这个类,其中的增删改查 ...

  4. JavaWeb学习之三层架构实例(二)

    引言 这个实例是上一个实例JavaWeb学习 三层架构实例(一)的加强版,实现的是在前端对数据库中student表的 增.删.改.查 操作.关于三层组成云云,这里就不再叙述. 实例 效果图 先来看一下 ...

  5. java:Session(概述,三层架构实例(实现接口封装JDBC),Session实现简单购物车实例)

    1.Session概述: Session:在计算机中,尤其是在网络应用中,称为“会话控制”.Session 对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序的 Web 页之间跳转时,存 ...

  6. 简单的web三层架构系统【第二版】

    昨天写了 web三层架构的第一版,准确的说是三层架构的前期,顶多算是个二层架构,要慢慢完善. 第一版里,程序虽说能运行起来,但是有一个缺陷,就是里面的SQL语句,是使用的拼接字符进行执行.这样安全系数 ...

  7. C# 使用三层架构实例演示-winForm 窗体登录功能

    ---------------------------------------------------------------------------------------------------华 ...

  8. C#三层架构实例

    对于三层的概念查也查了,看也看了,下面是我找的一个关于三层的简单实例,真正看一下它是如何具体实现的. 我们先来一起看看 实体类-Model 实质:实体类就是在完成数据库与实体类对应的功能,一个类是一张 ...

  9. SSH框架整合实现Java三层架构实例(一)

    HTML前台发送请求代码: <tr> <td>选择收派时间</td> <td> <input type="text" name ...

随机推荐

  1. 利用 FFmpeg 和 ImageMagick, AVI 转 GIF(不失真)

    利用[TMPGEnc 4.0 XPress] 或 [TMPGEnc Video Mastering Works 5] 生成 AVI 这个视频编辑软件,可对每个帧进行操作 1.生成每个帧的 PNG ff ...

  2. Java for LeetCode 077 Combinations

    Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. For exampl ...

  3. August 6th, 2016, Week 32nd, Saturday

    It is not the mountain we conquer, but ourselvess. 我们征服的不是高山,而是我们自己. Difficulties and obstacles, jus ...

  4. 为什么C++类定义中,数据成员不能被指定为自身类型,但可以是指向自身类型的指针或引用?为什么在类体内可以定义将静态成员声明为其所属类的类型呢 ?

    static的成员变量,不是存储在Bar实例之中的,因而不会有递归定义的问题. 类声明: class Screen: //Screen类的声明 1 类定义: class Screen{ //Scree ...

  5. svn 结合rsync 的代码发布系统

    由开发提交到测试环境,经测试,在由运维统一上线.试验需求一台测试服务器,一台线上(生产环境)服务器.测试服务器上跑svn是开发用于代码管理,而线上跑的svn是运维用来代码上线的.结合rsync保持测试 ...

  6. Java vararg(动态参数)的应用

    可变参数在JDK 1.5添加,刚才知道的. 以下来自<Java泛型和集合>一书. 将参数打包成一个数组传入方法中是一件让人讨厌的事,在jdk1.5中加入了一个新的功能称为vararg(动态 ...

  7. poj 3252 组合数

        主要考察组合数知识,初始化的时候参考公式 首先先推个公式,就是长度为len的Round Numbers的个数.      长度为len,第一位肯定是1了.      那么后面剩下 len-1位 ...

  8. FFmpeg源代码结构图

    转自:http://blog.csdn.net/leixiaohua1020/article/details/44220151 FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码 ...

  9. html5 canvas 标签

    <canvas id="board" width="500" height="400"></canvas> < ...

  10. js:语言精髓笔记2--表达式

    表达式:由运算符和运算元构成:JS中没有运算符的表达式称为单值表达式:没有运算元,孤立与代码上下文的运算符是不符合语法的:(表达式是有返回值的) 单值表达式: this引用: 变量引用: 直接量: n ...