《应用开发-数据库通用类的设计(C#从入门到精通).ppt》由会员分享,可在线阅读,更多相关《应用开发-数据库通用类的设计(C#从入门到精通).ppt(39页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第 15 章应用开发数据库通用类的设计o 由于系统中对于数据库操作都需要处理连接字符串、创建连接、执行查询、更新等通用操作,为了提高代码的复用性,在软件开发时一般都创建数据库通用类完成数据库的通用操作。本章介绍了流行的三层体系架构的概念、利用LINQ to SQL自动创建数据库通用类的方法和利用数据库通用类操作数据库的简单例子。o o 系统分析o 数据库分析和设计o 系统设计o 运行系统o 在我的WinForm应用中应用本系统o 开发过程常见问题及解决o 系统分析o 数据库分析和设计o 系统设计o 运行系统o 在我的WinForm应用中应用本系统o 开发过程常见问题及解决15.1 系统分析o
2、使用ADO.NET访问数据库时,每次操作都要设置数据库连接connection属性、建立连接、使用SQLcommand和进行事务处理等,比较繁琐且有很多重复操作。项目开发中一般创建数据库通用类把这些繁琐的、常用的操作封装起来,以更方便、安全地使用ADO.NET。15.1.1 三层体系结构o 目前,流行的项目多采用三层体系结构。三层体系结构就是在表示层(界面层)与数数据访问层之间加入一个中间层,叫做业务逻辑层,一般将业务规则、数据访问、合法性校验等工作放到中间层进行处理。通常情况下,客户端不直接与数据库进行交互,而是通过中间层与数据库进行交互。o 典型的三层结构包括表示层、业务逻辑层和数据访问层
3、,使用三层结构创建的应用系统,由于层与层之间的低耦合和层内部的高内聚,使得解决方案的维护变得更容易。o 表示层:主要是指与用户交互的界面,用于显示数据和接收用户的输入,将用户输入的数据传递给业务逻辑层,一般不包含任何实际的业务处理,当业务逻辑层的数据发生变化时,表示层就会显示出更新的结果。表示层是应用程序提供给用户的操作界面,通常是包含Windows窗体或Web页面的Windows窗体应用程序或Web应用程序。o 业务逻辑层:是表示层和数据访问层之间的桥梁,它代表应用程序的核心功能,负责处理数据层的数据,实现具体的业务逻辑。业务逻辑层通常为类库。o 数据访问层:主要实现对数据的操作,将数据库中
4、的数据提交给业务层,同时将业务层处理过的数据保存到数据库中。数据访问层可以访问关系数据库、文本文件或者XML文件,数据访问层通常为类库。o 使用三层结构的目的是是使项目结构更清楚,分工更明确,有利于维护。三层架构就像员工、经理和董事长之间的关系一样,员工向经理汇报工作,经理汇总后再向董事长汇报,反之,董事长有什么命令传达给经理即可,再由经理通知每位员工。如果员工都直接找董事长,管理就会变得比较混乱。o 三层架构搭建好之后,有一个问题需要解决,如何在三层之间传递数据呢?目前通用的解决方法有两种:一种是创建实体层使用实体层中的实体类在三层之间传递数据,另一种是使用数据集在三层之间传递数据。使用实体
5、类的优点是实体类是一个比较容易控制的对象,它具有面向对象的基本特征,可以自由的向实体类中添加行为等;实体类消除了关系数据和对象之间的差异,便于操纵关系数据;能更好地发挥分层的作用,更好地进行复用和扩展,增强灵活性。15.1.2 系统分析o 系统分析是开发应用系统的关键,通过系统分析了解客户需要什么样的程序,系统需要完成什么功能。通过软件需求规格说明书描述系统的总体要求,并且作为各方面沟通的依据,也为下一步工作提供基准。系统开发人员要按照软件需求规格说明书完成相应的功能。o 本节介绍的“数据库通用类”的设计来源于第24章的“人力资源管理系统”,重点介绍如何利用LINQ to SQL建立负责数据库
6、操作的通用实体类。“人力资源管理系统”中的主要功能,如员工管理、考评管理、员工调动管理、培训管理、奖惩管理等都需要操作数据库,每次操作需要设置连接属性、建立连接、使用SQLcommand、事务处理等,非常麻烦并有很多重复工作,所以创建一个通用类,以更方便、安全地操作数据库。o“人力资源管理系统”采用三层架构模型。利用LINQ to SQL创建数据库通用实体类实现在三个模块之间使用对象进行数据传递和负责操作数据库。利用.NET Framework 3.5中新增的LINQ可以简化三层体系架构的搭建,在以往的系统中,数据访问层要访问数据字段,业务逻辑层要得到数据都需要通过数据访问层来实现,通常创建数
7、据库通用类来辅助数据访问层操作数据库,数据库通用类可以看做单独的一层(数据模型层),LINQ可以自动生成数据模型层,产生一个dbml(Database Mark Language数据库描述语言)文件用来描述数据库信息,dbml文件是xml格式的文档,有了它可以快速生成实体类,实体类作为实体层负责对数据库操作。如下图的DataLinq层就是实体层和数据模型层的组合。利用LINQ创建的三层体系结构如下图所示。o 系统分析o 数据库分析和设计o 系统设计o 运行系统o 在我的WinForm应用中应用本系统o 开发过程常见问题及解决15.2 数据库分析和设计o 数据库设计是系统建设中非常重要的环节,合
8、理有效的数据库设计对系统的性能至关重要,也是创建系统的基础。15.2.1 数据库分析和设计o 通过系统分析,“人力资源管理系统”数据库中包含如下多个表。在SQL Server 2008 或者SQL Server 2005中创建数据库HrManage和系统中用到的表。表和表结构如下。o 1.考勤表(Attendance),用于存放员工考勤的信息。列名 数据类型 是否空 描述Aid Int No 标识列,编号EId Varchar(10)No 员工编号Date Varchar(10)Yes 统计月份Result Varchar(5)No 考勤结果Details Money No 考勤内容Remar
9、ks Float Yes 备注o 2.奖惩表(RewardsInfo),用于记录员工的考奖惩信息。列名 数据类型 是否空 描述RId Int No 标识列,编号Eid Varchar(10)No 员工编号Date Varchar(12)No 日期Type Varchar(5)No 奖惩类型Reason Int Yes 原因Score Int Yes 奖惩分数remarks Varchar(200)Yes 备注3.员工培训表(TrainInfo):记录员工的培训信息。列名 数据类型 是否空 描述Tid Int No 标识列,编号Eid Varchar(10)No 员工编号Date Varchar
10、(50)Yes 日期Course Varchar(20)No 培训课程Remarks Varchar(200)Yes 备注4.员工调动表(EmpTransfer),用于记录员工的调动信息。列名 数据类型 是否空 描述ETid Int No 标识列,编号Eid Varchar(10)No 员工编号rawSection Varchar(10)No 调动前部门rawPost Varchar(5)No 调动前职务nowSectionVarchar(10)No 调动后部门nowPost Varchar(5)No 调动后职务Date Varchar(50)Yes 调动日期reason Varchar(20
11、)No 原因remarks Varchar(200)yes 备注5.员工信息表(EmployInfo)列名 数据类型 是否空 描述EId Varchar(10)No 标识列,员工编号EName Varchar(10)No 姓名ESex Varchar(10)No 性别EBirthday Varchar(20)Yes 生日Ecard char(18)Yes 身份证Etel char(13)Yes 电话Eaddress Varchar(30)Yes 地址列名 数据类型 是否空 描述Sid Int Yes 部门Pid Int Yes 职务Ewage Money Yes 薪水EnterTime Var
12、char(50)Yes 入职时间State Varchar(5)Yes 当前状态Dimission Varchar(50)Yes 离职时间Resume Varchar(200)Yes 简历Remarks Varchar(200)Yes 备注Ephoto Image Yes 照片6.职位表(PostInfo)列名 数据类型 是否空 描述Pid int no 编号,自动编号postName Varchar(10)no 职务名列名 数据类型 是否空 描述Sid int no 编号,自动编号SectionName Varchar(10)no 部门名7.部门表(Section)8.工资变动表(Trans
13、ferWage)列名 数据类型 是否空 描述TWid int No 编号,自动编号Eid Varchar(10)No 员工编号Date Varchar(50)Yes 调薪日期rawWage Money No 原来薪水nowWage Money No 调后薪水reason Varchar(20)No 原因remarks Varchar(200)yes 备注15.2.2 数据库通用类的创建o 本节利用LINQ to SQL创建一个DataLinq层来组织数据库通用类,DataLinq层包含一个DataContext类和若干实体类,其结构如下:o DataContext类:项目中的每一个 LINQ
14、to SQL设计器将自动创建一个 DataContext类,用来查询数据库、检索数据记录和更新数据库操作的主要类,它包含了每一个表的属性。o 实体类:LINQ to SQL为添加到设计器(.dbml文件)中的每一个表创建对应的实体类,这些实体类包含了强类型属性集合,映射到数据库中对应表的字段。LINQ to SQL使用这些实体类来生成数据操作的SQL脚本,同时,也可以创建实体类的实例,给实例赋值,然后在不同的层之间作为数据传输对象进行传递。o DataContext类中的实体类和属性直接映射到对应数据表和字段。缺省情况下,在DataContext类中,LINQ 使用继承抽象类 MappingS
15、ource 的 AttributedMappingSource 类来存放表和字段的映射信息,从数据库中检索记录和提交数据更新到数据库时需要这些映射信息。利用Visual Studio 2008创建数据库通用类的步骤如下。o 启动Visual Studio 2008,新建一个“类库”项目,名称为“DataLinq”。o 单击菜单【项目】【添加类】,选择【Linq to SQL类】,输入类的名称“HrDataLinq”。单击【添加】按钮后,系统将增加HrDataLinq类到项目中,并自动创建一个空白的设计器(.dbml文件),同时附有【服务器资源管理器】的链接,也创建相关的dbml.layout文
16、件(XML文件)和designer.cs文件(DataContext类文件)。o 打开【服务器资源管理器】,并建立到HrManage数据库的链接,然后导航到HrManage数据库,将数据库中的表拖放到设计器。最后,保存文件后就自动生成了包含相关的属性、方法的DataContext类和实体类。o 单击【生成】-【生成解决方案】,数据库通用类和实体类就可以使用了。o 自动生成的数据库通用类DataContext(类名是HrDataLinqDataContext)类图如下:o 系统分析o 数据库分析和设计o 系统设计o 运行系统o 在我的WinForm应用中应用本系统o 开发过程常见问题及解决15.
17、3 系统设计o 自动生成的数据库通用类DataContext中的实体类和属性直接映射到对应数据表和字段。缺省情况下,在DataContext类中,LINQ 使用继承抽象类 MappingSource 的 AttributedMappingSource 类来存放表和字段的映射信息,从数据库中检索记录和提交数据更新到数据库时需要这些映射信息。部分代码如下(代码15-1.txt)。o 系统分析o 数据库分析和设计o 系统设计o 运行系统o 在我的WinForm应用中应用本系统o 开发过程常见问题及解决15.4 运行系统o 为了使用数据库通用类,下面我们开发一个查询职位信息的三层结构的例子。系统体系结
18、构设计如下:o 1.DataLinq层o DataLinq层是15.3节中设计的数据库通用类。o 2.添加数据访问层o 在解决方案中添加类库项目HrDAL,添加对DataLinq层的引用,编写代码如下:o 3.创建业务逻辑层o 在解决方案中添加类库项目HrBLL,添加对DataLinq层和HrDAL层的引用,编写代码如下:4.添加表示层o 创建Windows窗体应用程序,项目名为“HrManage”,在Form显示PostInfo表中的记录,窗体上放置一个Label和DataGridView控件;分别添加对DataLinq层和HrBLL层的引用,界面如下:o 编写代码如下(代码15-4.txt
19、)。o 将Windows窗体应用程序设置为启动项目后运行,运行界面如下。o 系统分析o 数据库分析和设计o 系统设计o 运行系统o 在我的WinForm应用中应用本系统o 开发过程常见问题及解决15.5 在我的Windows窗体应用程序中应用本系统o 15.2节中创建的数据库通用类将用在整个“人力资源管理系统”项目中,作为DataLinq层,负责操作数据库,从本章的介绍可以看到利用Linq to SQL创建一个DataContext类,不需要设置connection属性、建立connection,也不需要使用SQL语句就能操作数据库,非常简单和方便,极大的提高了开发效率,降低了开发难度。o 系
20、统分析o 数据库分析和设计o 系统设计o 运行系统o 在我的WinForm应用中应用本系统o 开发过程常见问题及解决15.6 开发过程常见问题及解决o 开发过程中经常出现的问题和解决方案如下.o 1.出现“error:40-无法打开到SQL Server的连接”错误。o 解决方法如下:o 可能是连接字符串有错。如是Windows窗体应用程序在app.config或settings.settings改正为正确的代码,注意连接字符串中Data Source后面是服务器的名称,一般写成“计算机名数据库实例名”格式,也可以写成“.”,.代表当前服务器,或写成local,或写成“127.0.0.1”等。
21、o 如是Web应用程序,在web.config中更改连接字符串。如:o connectionString=Data Source=CSSQLEXPRESS;Initial Catalog=HrManage;Integrated Security=Trueo 如字符串正确,可能是没有启用数据库的远程连接。o 启动远程连接:打开 SQL Server 2008 或2005的外围应用配置器,单击 开始-所有程序-Ms SQL Server-配置工具-SQL Server外围应用配置器-服务和连接的外围应用配置器-打开MSSQLSERVER节点下的Database Engine 节点,先择远程连接,接下建议选择同时使用TCP/IP和named pipes,确定后,重启数据库服务就可以了。o 2.出现找不到类型和命名空间名称的错误。如图所示:o 解决方法:在程序的开始添加命名空间的引用,using System.Data.Linq;o 3.缺少对程序集的引用,如:o 解决方法,添加对程序集的引用。在相应的项目下的引用上单击鼠标右键,添加引用即可。o ByeBye