C#第16章.ppt_第1页
C#第16章.ppt_第2页
C#第16章.ppt_第3页
C#第16章.ppt_第4页
C#第16章.ppt_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第 16 章向数据库中添加记录信息录入系统,向数据库中添加数据是一种常见的操作,如何将新的数据添加到数据库中呢?本章通过向“人力资源管理系统”添加员工的操作给大家介绍添加数据的具体方法和步骤,系统采用三层架构进行设计,并介绍了开发过程中常见的问题及解决方法。,系统分析 数据库分析和设计 系统设计 运行系统 在我的WinForm应用中应用本系统 开发过程常见问题及解决,系统分析 数据库分析和设计 系统设计 运行系统 在我的WinForm应用中应用本系统 开发过程常见问题及解决,16.1 系统分析,向数据库表中增加新记录是一种常见的操作,“人力资源管理系统”中的主要功能模块中都涉及到添加记新录到数

2、据库表中的操作。如: 员工管理模块中添加新员工操作; 考评管理模块中添加员工的考评信息; 员工调动管理模块中添加员工的调动信息; 培训管理模块中添加员工培训的记录信息; 奖惩管理模块中添加对员工的奖惩信息等。 上面这些添加信息到数据库表中的操作基本上是类似的,在三层体系结构中,表示层提供添加信息的录入界面,业务逻辑层实现具体的业务逻辑,数据访问层负责把新数据添加到数据库表中。本章以添加员工信息为例来介绍向数据库中添加记录的操作过程和代码的编写。,系统分析 数据库分析和设计 系统设计 运行系统 在我的WinForm应用中应用本系统 开发过程常见问题及解决,16.2 数据库分析和设计,添加员工信息

3、到数据库中涉及到三个表:一个是存放员工信息的员工信息表,其他两个是和员工信息表有外键约束的员工职位表和员工部门表。数据库设计如下:,员工信息表(EmployInfo):用来存储员工的信息。,在员工信息表中,字段Sid和Pid的值来自职位表和部门表中的字段。,职位表(PostInfo):用来存储公司所有职位的名称;,列名数据类型是否空描述 Pidintno编号,自动编号 postNameVarchar(10)no 职务名部门表(Section):用来存储公司所有部门的信息。 列名数据类型是否空描述 Sid int no编号,自动编号 SectionNameVarchar(10)no部门名,系统分

4、析 数据库分析和设计 系统设计 运行系统 在我的WinForm应用中应用本系统 开发过程常见问题及解决,16.3 系统设计,在第15章中给出了系统的总体设计,本节在第15章的基础上,使用LINQ 操作实现添加员工信息的操作。用HrDAL、HrBLL、HrMamage分别表示数据访问层、业务逻辑层和表示层,DataLinq层辅助数据库的读写操作。下面介绍代码的编写。 1. 在HrDAL数据访问层的HrDAL.cs文件中的DALEmployInfo类里添加增加记录的InsertRecord方法,编写代码如下(代码16-1-1.txt): 2. 在HrDAL数据访问层的HrDAL.cs文件中的DAL

5、EmployInfo类里添加获取员工标号Eid字段最大值的SelectMaxRecordNo方法,编写代码如下(代码16-1-2.txt):,3. 在HrDAL数据访问层的HrDAL.cs文件中的DALPostInfo类里添加从职位名称到职位编号转换的方法SelectPIDByPName方法,这是录入职位名称时是汉字表示的职位名称,而保存到员工信息表则职位名称在PostInfo表中对应的编号。代码如下(代码16-1-3.txt): 4. 在HrDAL数据访问层的HrDAL.cs文件中的DALPostInfo类里添加返回表DALPostInfo的全部记录,并存放在IList中的方法如下(代码16

6、-1-4.txt): 5. 在HrDAL数据访问层的HrDAL.cs文件中的DALSectionInfo类里添加从部门名称到部门编号转换的方法SelectSIDBySName方法,这是因为我们录入的部门名称是汉字表示的名称,而保存到员工信息表中则是部门名称对应的编号。代码如下(代码16-1-5.txt):,6. 在HrDAL数据访问层的HrDAL.cs文件中的DALSectionInfo类里添加返回表Section的全部记录,存放在IList中的方法如下(代码16-1-6.txt): 7. 在业务逻辑层,分别添加如下方法以调用1-4步中添加到数据访问层中的方法。 在项目HrBLL中HrBLL.

7、cs文件的BLLEmployInfo添加代码如下(代码16-2-1.txt): 在项目HrBLL中HrBLL.cs文件的BLLPostInfo添加代码如下(代码16-2-2.txt): 在项目HrBLL中HrBLL.cs文件的BLLSectionInfo添加代码如下(代码16-2-3.txt):,8. 在表示层:设计Windows Form用来添加员工记录,控件名称和属性设置见源代码,窗体上控件如下: (1)编写代码实现添加输入的记录到数据库中,代码如下。 在窗体AddEmployInfo类中添加方法happen用于将输入的记录内容赋给定义的变量。 编写【添加】按钮的单击事件处理程序,实现添加

8、记录(代码16-3-3.txt)。 编写添加照片的链接单击事件处理程序(代码16-3-4.txt)。 编写AddEmployInfo的Load事件处理程序,实现初始化窗体(代码16-3-5.txt)。,系统分析 数据库分析和设计 系统设计 运行系统 在我的WinForm应用中应用本系统 开发过程常见问题及解决,16.4 运行系统,运行程序出现添加记录窗体,按要求输入所需数据,单击添加按钮,运行结果如下:,系统分析 数据库分析和设计 系统设计 运行系统 在我的WinForm应用中应用本系统 开发过程常见问题及解决,16.5 在我的Windows窗体应用程序中应用本系统,本章编写的添加新员工信息小

9、模块中的数据访问层和业务逻辑层的代码不需做任何改动就可用在整个“人力资源管理系统”项目开发中,表示层部门分需要稍微改动以适合项目的整体要求。,系统分析 数据库分析和设计 系统设计 运行系统 在我的WinForm应用中应用本系统 开发过程常见问题及解决,16.6 开发过程常见问题及解决,开发过程中经常出现的问题和解决方案如下: 1. 输入数据的验证,如身份证号码、电话号码等。 解决方法是使用正则表达式,如下: 导入正则表达式名称空间 01 using System.Text.RegularExpressions; 定义验证的正则表达式 01 Regex r = new Regex(d17d|X|

10、d15);/用于验证身份证是否合法,01 Regex r1 = new Regex(d3)|d3-)?d8);/用于验证电话号码 02 Regex r2 = new Regex(1-9d*.d*|0.d*1-9d*|0?.0+|0$);/用于验证工资是否符合要求 编码进行验证,如 if (r.IsMatch(txtIDCard.Text) = false) /如果txtIDCard中的值不符合定义的正则表达式要求,返回false MessageBox.Show(身份证不正确!); if (r1.IsMatch(txtTelephone.Text) = false) MessageBox.Sho

11、w(电话号码不正确!); if (r2.IsMatch(txtGz.Text) = false) MessageBox.Show(工资格式不正确!); ,2. 保存图像到数据库图像字段。 定义全局变量 string fileName = null;/用于存放照片的文件名 byte imgBytes = null;/用于将照片图片转为byte数组写入数据库 通过打开文件对话框控件,选择图片文件,并显示在pictureBox中。 this.openFileDialog1.Filter = *.jpg|*.JPG|*.gif|*.GIF|*.bmp|*.BMP; if (openFileDialog

12、1.ShowDialog() = DialogResult.OK) fileName = openFileDialog1.FileName; this.pictureBox1.ImageLocation = fileName; , 利用文件流读图片文件,将二进制的图片内容读入byte数组中 FileStream fs = new FileStream(fileName, FileMode.Open); imgBytes = new bytefs.Length; BinaryReader br = new BinaryReader(fs); imgBytes = br.ReadBytes(Con

13、vert.ToInt32(fs.Length); 3. 自动生成可用员工编号,避免员工编号重复引起主键冲突导致添加失败。解决方法是读取数据库表中员工编号字段的最大值,生成的新员工编号是员工编号字段的最大值加1的实现代码如下: 在数据访问层添加得到员工编号最大值的方法,注意EmployeeInfo表中员工编号字段EID是字符型,为了得到最大值需要转为整型。,public int SelectMaxRecordNo() /得到EmployInfo中Eid字段的最大值,便于添加记录时自动生成Eid字段的值避免出错。 try /利用LINQ查询得到EmployInfo中Eid字段的最大值作为方法的返回值 return (from maxEID in objDataContext.EmployInfo select (Convert.ToInt32 ( maxEID.Eid).Max() ; catch (Exception ex) throw ex; , 在业务逻辑层添加

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论