您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > Java > VBDotNET三层架构数据库增删改查学习心得(原创)
(原创)VB.NET三层架构数据库增删改查学习心得-WinForm通过一段时间对三层架构的学习,现将我的学习心得体会与大家分享。本程序所使用的界面为Window应用程序(WinForm)界面,是客户端/服务器(C/S)模式的程序。界面(UI)对三层架构来说使用WinForm还是WebForm异或移动设备都是一样的,无论换了什么皮肤都能基本使用才是三层架构意义之所在。本程序在SQL-Server2005+VB.NET2008下测试通过(附源码)。一、首先说说三层架构的概念及作用,见下表。三层架构(3-tierarchitecture)通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想。分层(tier)概念作用表现层(UI)通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。主要表示WEB方式,也可以表示成WINFORM方式,WEB方式也可以表现成:aspx,如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务。业务逻辑层(BLL)针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理,如果说数据层是积木,那逻辑层就是对这些积木的搭建。数据访问层(DAL)该层所做事务直接操作数据库,针对数据的增添、删除、修改、查找等。主要是对原始数据(数据库或者文本文件等存放数据的形式)的操作层,而不是指原始数据,也就是说,是对数据的操作,而不是数据库,具体为业务逻辑层或表示层提供数据服务.数据库实体类(Entity)对数据对象进行封装,也有一些简单的功能他在三层中并不是作为一层而存在的,而是作为一个类库,起到封装的作用。由上表可以看出,多出的一个数据库实体类(Entity),他在三层中并不是作为一层而存在的,而是作为一个类库,起到封装数据库表的作用。再说说各层及类库之间的联系,见下图:其他的三层架构的优点及缺点本文就不论述了,请查阅相关资料。二、本程序三层架构具体内容简介1、解决方案概览2、各层的内部属性、方法、函数分层(tier)对象名属性、方法、函数作用表现层(UI)UI_Tier过程:DataGridViewLoad将查询的所有记录填充到DataGridView中业务逻辑层(BLL)B_UserInfoInsert添加记录Delete删除记录Update修改记录FindAll查询所有记录FindOne查询一条记录DataIsExsit查询一条记录是否存在数据访问层(DAL)D_UserInfoInsert添加记录Delete删除记录Update修改记录三、三层架构建立前期准备工作。1、建立一张UserInfo表,源码如下:CREATETABLE[dbo].[UserInfo]([UserID][int]NULL,[UserName][varchar](12),[UserPwd][varchar](16),[UserBirth][datetime],[UserQQ][varchar](14))ON[PRIMARY]2、建立一个Windows窗体应用程序文件→新建→项目→VisualBasic→Windows→Windows窗体应用程序。这里是中文版VB.NET2008,不同版本上述内容有些不同翻译。3、建立Entity、DAL、BLL类库在第二步所创建的解决方案下,选择文件→添加→新建项目→VisualBasic→Windows→类库。本程序是将所有类库建立在了一个解决方案之下,也可以独立分别建立独立的类库方案。就是调用的时候不太方便。4、设计UI操作界面如下:四、开始三层架构的代码设计顺序是数据库实体类(Entity)、数据访问层(DAL)、业务逻辑层(BLL)、表现层(UI)。本文是在ASP界面《小燕雀DaoNet三层架构》基础上结合我的想法而设计的。这个视频对我学习三层架构有很大启发。1、数据库实体类(Entity)代码如下:PublicClassE_UserInfo#Region定义userInfo表中各个属性变量FindAll查询所有记录FindOne查询一条记录DataIsExsit查询一条记录是否存在数据库实体类(Entity)E_UserInfo方法:Fill填充一条记录属性:UserID属性:UserName属性:UserPwd属性:UserBirth属性:UserQQ封装数据库表Private_UserIDAsIntegerPrivate_UserNameAsStringPrivate_UserPwdAsStringPrivate_UserBirthAsDatePrivate_UserQQAsString#EndRegion#Region定义数据表中各个属性PublicPropertyUserID()AsIntegerGetReturn_UserIDEndGetSet(ByValvalueAsInteger)_UserID=valueEndSetEndPropertyPublicPropertyUserName()AsStringGetReturn_UserNameEndGetSet(ByValvalueAsString)_UserName=valueEndSetEndPropertyPublicPropertyUserPwd()AsStringGetReturn_UserPwdEndGetSet(ByValvalueAsString)_UserPwd=valueEndSetEndPropertyPublicPropertyUserBirth()AsDateGetReturn_UserBirthEndGetSet(ByValvalueAsDate)_UserBirth=valueEndSetEndPropertyPublicPropertyUserQQ()AsStringGetReturn_UserQQEndGetSet(ByValvalueAsString)_UserQQ=valueEndSetEndProperty#EndRegion#Region填充一条记录PublicOverloadsSubFill(ByValPUserIDAsInteger,ByValPUserNameAsString,ByValPUserPwdAsString,ByValPUserBirthAsDate,ByValPUserQQAsString)'重载方法fill方便填充数据,否则引用该对象的时候得写一堆上面的填值代码,UI界面使用非常方便UserID=PUserIDUserName=PUserNameUserPwd=PUserPwdUserBirth=PUserBirthUserQQ=PUserQQEndSub#EndRegionEndClass2、数据访问层(DAL)代码如下:本程序DAL层与小燕雀的代码设计有很多不同,很多方法是我个人习惯。'手动添加引用本项目Entity'代码添加引用System.Data.SqlClientImportsSystem.Data.SqlClientPublicClassD_UserInfo#Region连接字符串PublicFunctionConnStr()AsStringReturnDataSource=172.30.76.249;InitialCatalog=Wink;UserID=wink;Pwd=wcp6810662EndFunction#EndRegion#Region添加记录PublicFunctionInsert(ByValEntityUserInfoAsEntity.E_UserInfo)AsBooleanDimsqlStrAsString=insertintoUserInfo(UserID,UserName,UserPwd,UserBirth,UserQQ)values(@UserID,@UserName,@UserPwd,@UserBirth,@UserQQ)DimconnAsSqlConnection=NewSqlConnection(ConnStr)DimcmdAsSqlCommand=NewSqlCommand(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.Parameters.Add(@UserBirth,SqlDbType.DateTime).Value=EntityUserInfo.UserBirthcmd.Parameters.Add(@UserQQ,SqlDbType.VarChar).Value=EntityUserInfo.UserQQTryconn.Open()Returncmd.ExecuteNonQuery()0CatchexAsExceptionReturnFalseFinallyIfNotIsNothing(cmd)Thencmd.Dispose()cmd=NothingEndIfIfNotIsNothing(conn)Thenconn.Close()conn=NothingEndIfEndTryEndFunction#EndRegion#Region删除记录PublicFunctionDelete(ByValPuserIdAsInteger)AsBooleanDimsqlStrAsString=deletefromUserInfowhereUserID=@UserIDDimconnAsSqlConnection=NewSqlConnection(ConnStr)DimcmdAsSqlCommand=NewSqlCommand(sqlStr,conn)cmd.Parameters.Add(@UserID,SqlDbType.Int).Value=PuserIdTryconn.Open()Returncmd.ExecuteNonQuery()0CatchexAsExceptionReturnFalseFinallyIfNotIsNothing(cmd)Thencmd.Dispose()cmd=NothingEndIfIfNotIsNothing(conn)Thenconn.Close()conn=NothingEndIfEndTryEndFunction#EndRegion#Region修改记录PublicFunctionUpdate(ByValEntityUserInfoAsEntity.E_UserInfo)AsBooleanDimsqlStrAsString=updateUserInfosetUserName=@UserName,UserPwd=@UserPwd,UserBirth=@UserBirth,UserQQ=@UserQQwhereUserID=@UserIDDimconnAsSqlConnection=NewSqlConnection(ConnStr)DimcmdAsSqlCommand=NewSqlCommand(sqlStr,conn)cmd.Parameters.Add(@UserID,SqlDbType.Int).Value=EntityUserInfo.UserIDcmd.Parameters.Add(@UserName,SqlDbType.VarChar).Value=EntityUserInfo.UserNamecmd.Parameters.Add(@UserP
本文标题:VBDotNET三层架构数据库增删改查学习心得(原创)
链接地址:https://www.777doc.com/doc-5142768 .html