收藏 分享(赏)

VBDotNET三层架构数据库增删改查学习心得(原创).doc

上传人:scg750829 文档编号:6517540 上传时间:2019-04-14 格式:DOC 页数:13 大小:244KB
下载 相关 举报
VBDotNET三层架构数据库增删改查学习心得(原创).doc_第1页
第1页 / 共13页
VBDotNET三层架构数据库增删改查学习心得(原创).doc_第2页
第2页 / 共13页
VBDotNET三层架构数据库增删改查学习心得(原创).doc_第3页
第3页 / 共13页
VBDotNET三层架构数据库增删改查学习心得(原创).doc_第4页
第4页 / 共13页
VBDotNET三层架构数据库增删改查学习心得(原创).doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

1、(原创)VB.NET三层架构数据库增删改查学习心得-WinForm通过一段时间对三层架构的学习,现将我的学习心得体会与大家分享。本程序所使用的界面为Window 应用程序(WinForm)界面,是客 户端/ 服务器( C/S)模式的程序。界面( UI)对三层架构来说使用WinForm还是 WebForm异或移动设备都是一样的,无论换了什么皮肤都能基本使用才是三层架构意义之所在。本程序在SQL-Server2005+VB.NET2008下测试通过(附源码)。一、首先说说三层架构的概念及作用,见下表。三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:

2、表现层(UI)、 业务逻辑层(BLL)、数据访问层(DAL)。区分 层次的目的即 为了“高内聚,低耦合”的思想。分层( tier) 概念 作用表现层(UI )通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。主要表示WEB方式,也可以表示成WINFORM方式,WEB方式也可以表现成:aspx,如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务。业务逻辑层(BLL)针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理,如果说数据层是积木,那逻辑层就是对这些积木的搭建

3、。数据访问层(DAL)该层所做事务直接操作数据库,针对数据的增添、删除、修改、查找等。主要是对原始数据(数据库或者文本文件等存放数据的形式)的操作层,而不是指原始数据,也就是说,是对数据的操作,而不是数据库,具体为业务逻辑层或表示层提供数据服务数据库实体类(Entity) 对数据对象进行封装,也有一些简单的功能他在三层中并不是作为一层而存在的,而是作为一个类库,起到封装的作用。由上表可以看出,多出的一个数据库实体类(Entity),他在三层中并不是作为一层而存在的,而是作为一个类库,起到封装数据库表的作用。再说说各层及类库之间的联系, 见下图:其他的三层架构的优点及缺点本文就不论述了,请查阅相

4、关资料。二、本程序三层架构具体内容简介1、解决方案概览2、各层的内部属性、方法、函数分层(tier) 对象名 属性、方法、函数 作用表现层(UI ) UI_Tier 过程:DataGridViewLoad 将查询的所有记录填充到DataGridView中Insert 添加记录Delete 删除记录Update 修改记录FindAll 查询所有记录FindOne 查询一条记录业务逻辑层(BLL) B_UserInfoDataIsExsit 查询一条记录是否存在Insert 添加记录Delete 删除记录数据访问层(DAL) D_UserInfo Update 修改记录三、三层架构建立前期准备工作

5、。1、建立一张UserInfo表,源码如下:CREATE TABLE dbo.UserInfo(UserID int NULL,UserName varchar(12) ,UserPwd varchar(16) ,UserBirth datetime ,UserQQ varchar(14) ) ON PRIMARY2、建立一个Windows窗体应用程序文件新建项目Visual BasicWindowsWindows窗体应用程序。 这里是中文版VB.NET2008,不同版本上述内容有些不同翻译。3、建立Entity、DAL、BLL类库在第二步所创建的解决方案下, 选择文件添加新建项 目Visua

6、l BasicWindows类库。本程序是将所有类库建立在了一个解决方案之下,也可以独立分 别建立独立的类库方案。就是调 用的时候不太方便。4、设计UI 操作界面如下:四、开始三层架构的代码设计顺序是数据库实体类(Entity)、数据访问层(DAL)、 业务逻辑层 (BLL)、表现层(UI)。本文是在 ASP 界面小燕雀 DaoNet 三层架构基础上结合我的想法而 设计的。 这个视频对我学习三层架构有很大启发。1、数据库实体类(Entity)代码如下:Public Class E_UserInfo#Region “定义userInfo表中各个属性变量“FindAll 查询所有记录FindOne

7、 查询一条记录DataIsExsit 查询一条记录是否存在方法:Fill 填充一条记录数据库实体类(Entity) E_UserInfo属性:UserID属性:UserName属性:UserPwd属性:UserBirth属性:UserQQ封装数据库表Private _UserID As IntegerPrivate _UserName As StringPrivate _UserPwd As StringPrivate _UserBirth As DatePrivate _UserQQ As String#End Region#Region “定义数据表中各个属性“Public Propert

8、y UserID() As IntegerGetReturn _UserIDEnd GetSet(ByVal value As Integer)_UserID = valueEnd SetEnd PropertyPublic Property UserName() As StringGetReturn _UserNameEnd GetSet(ByVal value As String)_UserName = valueEnd SetEnd PropertyPublic Property UserPwd() As StringGetReturn _UserPwdEnd GetSet(ByVal

9、value As String)_UserPwd = valueEnd SetEnd PropertyPublic Property UserBirth() As DateGetReturn _UserBirthEnd GetSet(ByVal value As Date)_UserBirth = valueEnd SetEnd PropertyPublic Property UserQQ() As StringGetReturn _UserQQEnd GetSet(ByVal value As String)_UserQQ = valueEnd SetEnd Property#End Reg

10、ion#Region “填充一条记录“Public Overloads Sub Fill(ByVal PUserID As Integer, ByVal PUserName As String, ByVal PUserPwd As String, ByVal PUserBirth As Date, ByVal PUserQQ As String)重载方法fill方便填充数据,否则引用该对象的时候得写一堆上面的填值代码,UI界面使用非常方便UserID = PUserIDUserName = PUserNameUserPwd = PUserPwdUserBirth = PUserBirthUse

11、rQQ = PUserQQEnd Sub#End RegionEnd Class2、数据访问层(DAL)代码如下:本程序DAL 层与小燕雀的代 码设计 有很多不同,很多方法是我个人习惯。手动添加引用本项目Entity代码添加引用System.Data.SqlClientImports System.Data.SqlClientPublic Class D_UserInfo#Region “连接字符串“Public Function ConnStr() As StringReturn “Data Source=172.30.76.249;Initial Catalog=Wink;User ID=

12、wink;Pwd=wcp6810662“End Function#End Region#Region “添加记录“Public Function Insert(ByVal EntityUserInfo As Entity.E_UserInfo) As BooleanDim sqlStr As String = “insert into UserInfo (UserID,UserName,UserPwd,UserBirth,UserQQ) values (UserID,UserName,UserPwd,UserBirth,UserQQ)“Dim conn As SqlConnection = N

13、ew SqlConnection(ConnStr)Dim cmd As SqlCommand = New SqlCommand(sqlStr, conn)cmd.Parameters.Add(“UserID“, SqlDbType.Int).Value = EntityUserInfo.UserIDcmd.Parameters.Add(“UserName“, SqlDbType.VarChar).Value = EntityUserInfo.UserNamecmd.Parameters.Add(“UserPwd“, SqlDbType.VarChar).Value = EntityUserIn

14、fo.UserPwdcmd.Parameters.Add(“UserBirth“, SqlDbType.DateTime).Value = EntityUserInfo.UserBirthcmd.Parameters.Add(“UserQQ“, SqlDbType.VarChar).Value = EntityUserInfo.UserQQTryconn.Open()Return cmd.ExecuteNonQuery() 0Catch ex As ExceptionReturn FalseFinallyIf Not IsNothing(cmd) Thencmd.Dispose()cmd =

15、NothingEnd IfIf Not IsNothing(conn) Thenconn.Close()conn = NothingEnd IfEnd TryEnd Function#End Region#Region “删除记录“Public Function Delete(ByVal PuserId As Integer) As BooleanDim sqlStr As String = “delete from UserInfo where UserID=UserID“Dim conn As SqlConnection = New SqlConnection(ConnStr)Dim cm

16、d As SqlCommand = New SqlCommand(sqlStr, conn)cmd.Parameters.Add(“UserID“, SqlDbType.Int).Value = PuserIdTryconn.Open()Return cmd.ExecuteNonQuery() 0Catch ex As ExceptionReturn FalseFinallyIf Not IsNothing(cmd) Thencmd.Dispose()cmd = NothingEnd IfIf Not IsNothing(conn) Thenconn.Close()conn = Nothing

17、End IfEnd TryEnd Function#End Region#Region “修改记录“Public Function Update(ByVal EntityUserInfo As Entity.E_UserInfo) As BooleanDim sqlStr As String = “update UserInfo set UserName=UserName,UserPwd=UserPwd,UserBirth=UserBirth,UserQQ=UserQQ where UserID=UserID“Dim conn As SqlConnection = New SqlConnect

18、ion(ConnStr)Dim cmd As SqlCommand = New SqlCommand(sqlStr, conn)cmd.Parameters.Add(“UserID“, SqlDbType.Int).Value = EntityUserInfo.UserIDcmd.Parameters.Add(“UserName“, SqlDbType.VarChar).Value = EntityUserInfo.UserNamecmd.Parameters.Add(“UserPwd“, SqlDbType.VarChar).Value = EntityUserInfo.UserPwdcmd

19、.Parameters.Add(“UserBirth“, SqlDbType.DateTime).Value = EntityUserInfo.UserBirthcmd.Parameters.Add(“UserQQ“, SqlDbType.VarChar).Value = EntityUserInfo.UserQQTryconn.Open()Return cmd.ExecuteNonQuery() 0Catch ex As ExceptionReturn FalseFinallyIf Not IsNothing(cmd) Thencmd.Dispose()cmd = NothingEnd If

20、If Not IsNothing(conn) Thenconn.Close()conn = NothingEnd IfEnd TryEnd Function#End Region#Region “查询所有记录“返回recordset不好使,ASP.NET的gridview控件可以接收recordset,VB.NET的datagridview需要接收datatablePublic Function FindAll() As DataTableDim sqlStr As String = “select * from UserInfo“Dim conn As SqlConnection = New

21、 SqlConnection(ConnStr)Dim cmd As SqlCommand = New SqlCommand(sqlStr, conn)Dim da As SqlDataAdapter = New SqlDataAdapter(cmd) Dim ds As New DataSetDim dt As New Data.DataTableTryda.Fill(ds, “UserInfo“)dt = ds.Tables(“UserInfo“)Return dtCatch ex As ExceptionReturn NothingFinallyIf Not IsNothing(da) T

22、henda.Dispose()da = NothingEnd IfIf Not IsNothing(cmd) Thencmd.Dispose()cmd = NothingEnd IfIf Not IsNothing(conn) Thenconn.Close()conn = NothingEnd IfEnd TryEnd Function#End Region#Region “查询一条记录“Public Function FindOne(ByVal PuserId As Integer) As Entity.E_UserInfoDim sqlStr As String = “select * f

23、rom UserInfo where UserID=UserID“Dim conn As SqlConnection = New SqlConnection(ConnStr)Dim cmd As SqlCommand = New SqlCommand(sqlStr, conn)Dim da As SqlDataAdapter = New SqlDataAdapter(cmd)cmd.Parameters.Add(“UserID“, SqlDbType.Int).Value = PuserIdDim EntityUserInfo As Entity.E_UserInfo = New Entity

24、.E_UserInfoDim ds As New DataSetTryconn.Open()da.Fill(ds, “UserInfo“)Dim dr As DataRow = ds.Tables(“UserInfo“).Rows(0)EntityUserInfo.UserID = dr(“UserID“)EntityUserInfo.UserName = dr(“UserName“)EntityUserInfo.UserPwd = dr(“UserPwd“)EntityUserInfo.UserBirth = dr(“UserBirth“)EntityUserInfo.UserQQ = dr

25、(“UserQQ“)Return EntityUserInfoCatch ex As ExceptionReturn NothingFinallyIf Not IsNothing(da) Thenda.Dispose()da = NothingEnd IfIf Not IsNothing(cmd) Thencmd.Dispose()cmd = NothingEnd IfIf Not IsNothing(conn) Thenconn.Close()conn = NothingEnd IfEnd TryEnd Function#End Region#Region “查询一条记录是否存在“这个很重要

26、,否则经常会出现-未处理 System.NullReferenceException,“未将对象引用设置到对象的实例。“例如查询结果是空时,你仍继续对“空(null、nothing)”进行操作,就会出现此异常。Public Function DataIsExsit(ByVal PuserId As Integer) As BooleanDim sqlStr As String = “select UserID from UserInfo where UserID=UserID“Dim conn As SqlConnection = New SqlConnection(ConnStr)Dim c

27、md As SqlCommand = New SqlCommand(sqlStr, conn)cmd.Parameters.Add(“UserID“, SqlDbType.Int).Value = PuserIdTryconn.Open()Dim result = cmd.ExecuteScalarIf Not IsNothing(result) ThenReturn TrueElseReturn FalseEnd IfCatch ex As ExceptionReturn FalseFinallyIf Not IsNothing(cmd) Thencmd.Dispose()cmd = Not

28、hingEnd IfIf Not IsNothing(conn) Thenconn.Close()conn = NothingEnd IfEnd TryEnd Function#End RegionEnd Class3、业务逻辑层(BLL)代码如下:大家可以看到本程序的BLL代码非常简单,有点 类似于工厂,实际上不是,这里还需要很多业务逻辑进行处理,看看其他文章关于登 录操作的三 层架构就可以知道这层的重要作用。手动引用Entity、DALPublic Class B_UserInfo#Region “添加记录“Public Function Insert(ByVal EntityUserIn

29、fo As Entity.E_UserInfo) As BooleanDim DalUserInfo As New DAL.D_UserInfoReturn DalUserInfo.Insert(EntityUserInfo)End Function#End Region#Region “删除记录“Public Function Delete(ByVal PuserId As Integer) As BooleanDim DalUserInfo As New DAL.D_UserInfoReturn DalUserInfo.Delete(PuserId)End Function#End Reg

30、ion#Region “修改记录“Public Function Update(ByVal EntityUserInfo As Entity.E_UserInfo) As BooleanDim DalUserInfo As New DAL.D_UserInfoReturn DalUserInfo.Update(EntityUserInfo)End Function#End Region#Region “查询所有记录“Public Function FindAll() As DataTableDim DalUserInfo As New DAL.D_UserInfoReturn DalUserI

31、nfo.FindAllEnd Function#End Region#Region “查询一条记录“Public Function FindOne(ByVal PuserId As Integer) As Entity.E_UserInfoDim DalUserInfo As New DAL.D_UserInfoReturn DalUserInfo.FindOne(PuserId)End Function#End Region#Region “查询一条记录是否存在“Public Function DataIsExsit(ByVal PuserId As Integer) As BooleanD

32、im DalUserInfo As New DAL.D_UserInfoReturn DalUserInfo.DataIsExsit(PuserId)End Function#End RegionEnd Class4、表现层(UI )代码如下:下面的代码只是实现功能的主干代码,可以 进行简单测试 ,如要 进行实际应用需要进行若干的防止BUG代码(如判断是否为空等)。手动引用BLL、DAL、EntityPublic Class UI_TierPrivate Sub UI操作界面_Load(ByVal sender As System.Object, ByVal e As System.Event

33、Args) Handles MyBase.LoadDataGridViewLoad()End SubPrivate Sub DataGridViewLoad()Dim bllUserInfo As New BLL.B_UserInfoDGVUserInfo.DataSource = bllUserInfo.FindAll()End SubPrivate Sub B_Insert_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_Insert.ClickDim bllUserInfo As

34、New BLL.B_UserInfoDim entityUserInfo As New Entity.E_UserInfoentityUserInfo.Fill(TextID.Text, TextName.Text, TextPwd.Text, DtpBirth.Value, TextQQ.Text)bllUserInfo.Insert(entityUserInfo)DataGridViewLoad()End SubPrivate Sub B_Delete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Han

35、dles B_Delete.ClickDim bllUserInfo As New BLL.B_UserInfoIf bllUserInfo.Delete(TextID.Text) ThenMessageBox.Show(“成功删除记录!“, “删除记录“, MessageBoxButtons.OK, MessageBoxIcon.Information)DataGridViewLoad()ElseMessageBox.Show(“未删除记录!记录不存在或输入为空!“, “删除记录“, MessageBoxButtons.OK, MessageBoxIcon.Error)End IfEnd S

36、ubPrivate Sub B_FindOne_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_FindOne.ClickDim bllUserInfo As New BLL.B_UserInfoDim entityUserInfo As New Entity.E_UserInfoDim tmpUserid As IntegertmpUserid = TextID.TextentityUserInfo = bllUserInfo.FindOne(tmpUserid)TextID.Text =

37、 entityUserInfo.UserIDTextName.Text = entityUserInfo.UserNameTextPwd.Text = entityUserInfo.UserPwdDtpBirth.Value = entityUserInfo.UserBirthTextQQ.Text = entityUserInfo.UserQQEnd SubPrivate Sub B_Update_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_Update.ClickDim bllUse

38、rInfo As New BLL.B_UserInfoDim entityUserInfo As New Entity.E_UserInfoentityUserInfo.Fill(TextID.Text, TextName.Text, TextPwd.Text, DtpBirth.Value, TextQQ.Text)bllUserInfo.Update(entityUserInfo)DataGridViewLoad()End SubPrivate Sub B_IsExist_Click(ByVal sender As System.Object, ByVal e As System.Even

39、tArgs) Handles B_IsExist.ClickDim bllUserInfo As New BLL.B_UserInfoIf bllUserInfo.DataIsExsit(CInt(TextID.Text) = True ThenMsgBox(“存在此条记录!“)ElseMsgBox(“不存在此条记录!“)End IfEnd SubEnd Class五、说一下三层架构与MVC 的区 别学习过JAVA的都非常熟悉MVC,也非常容易将之与三层架构相混淆。三层架构与MVC设计模式还是不同的,一个是程序架构、一个是设计模式。MVC(模型Model-视图View-控制器Controlle

40、r)是一种设计 模式,可以用它来 创建在域对象和UI 表示层对 象之间的区分。同样是架构级别的,相同的地方在于他 们都有一个表现层 ,但是他 们不同的地方在于其他的两个层。在三层架构中没有定义Controller的概念。 这是最不同的地方。而MVC也没有把业务的逻辑访问看成两个层,这是采用三 层架构或MVC搭建程序最主要的区 别。当然了。在三层中也提到了Model,但是三层架构中Model的概念与MVC 中Model的概念是不一样的,“三层”中典型的Model层是以实体类构成的,而MVC 里, 则是由业务逻辑 与访问数据组成的。六、总结一下本文所设计的三层架构非常简单,只适合中小型程序,其实对一些小型程序,一个WindowsApplication 或者 WebApplication 也是够用的。其他的三层架构,使用 COM+(Enterprise Service),还是 Remoting,还是 WebService 之类的远程对象技术更适合大型或超大型的应用。当你对本文这个简单的三层架构熟悉了以后,将使你更好地 进行下一步的关于工厂和反射机制学习。它们将使你的程序更加 稳定、健壮。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 工作总结

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报