C

雅轩聊科技 2024-08-06 17:34:40

哈喽,你好啊,我是雷工!

当添加人员信息的未录入验证,系统中是否已存在验证这些验证通过后,需要将数据存入数据库中。

按照分层架构的开发方法,首先在数据访问类中编写好数据访问方法,

以下为练习笔记。

01 效果演示

①确认添加

当填写完人员基本信息,点击【确认添加】按钮,首先初步数据验证,是否为空,数据库中是否已经存在该身份证号信息,考勤卡号信息,通过验证后将数据存储到数据库,并显示在下方列表;

②数据库查询

确认添加完成,查询数据库中的Peoples表,可以看到添加的信息已经可以看到。

02 实现步骤

2.1、数据访问层

在DAL数据访问层的PeopleServices类类中编写添加人员对象的方法;

只要是增删改,一般都是int类型;

①引入命名空间

using Models;

②编写方法

编写将UI传递的人员对象信息添加到数据库的方法;

其中基本思路为:

1>编写SQL语句;

2>解析UI传递的对象;

3>向数据库提交SQL语句

/// <summary>/// 将人员对象信息保存到数据库/// </summary>/// <param name="objPeople"></param>/// <returns>返回添加人员的编号</returns>/// <exception cref="Exception"></exception>public int AddPeople(People objPeople){ //编写sql语句 StringBuilder sqlBuilder = new StringBuilder("insert into Peoples "); sqlBuilder.Append("(PeopleName,Gender,Birthday,Age,PeopleIdNo,CardNo,PhoneNumber,PeopleAddress,GroupId,PeoImage)"); sqlBuilder.Append("values('{0}','{1}','{2}',{3},{4},'{5}','{6}','{7}',{8},'{9}');select @@identity"); //解析对象 string sql = string.Format(sqlBuilder.ToString(), objPeople.PeopleName, objPeople.Gender, objPeople.Birthday.ToString("yyyy-MM-dd"), objPeople.Age, objPeople.IdNumber, objPeople.CarNo, objPeople.PhoneNumber, objPeople.Address, objPeople.GroupId, objPeople.PeoImage); //提交SQL语句 try {return Convert.ToInt32(SQLHelper.GetSingleResult(sql));//执行SQL语句,返回人员编号 } catch (Exception ex) {throw new Exception("添加人员时数据库访问异常" + ex.Message); }}

2.2、图片序列成字符串

其中涉及存储图片,数据库中存储图片是将图片序列成字符串,然后存入数据库,

这里在UI层的通用文件夹Common中添加SerializeObjectToString类,

在其中添加方法,将图片对象转化为二进制字符串;

方法代码如下:

//将object类型对象转化为二进制字符串public string SerializeObject(object obj){ IFormatter formatter = new BinaryFormatter(); string result = string.Empty; using (MemoryStream stream = new MemoryStream()) {formatter.Serialize(stream, obj);byte[] byt = new byte[stream.Length];byt = stream.ToArray();result = Convert.ToBase64String(byt);stream.Flush(); } return result;}

2.3、准备

①临时保存

在FrmAddPeople中编写添加人员的功能之前需要先添加一个List数组用于临时保存添加的人员对象以显示到界面的列表。

List<People> peoList = new List<People>();//用来临时保存人员对象

②属性设置

在界面加载时设置DataGridView控件的属性,使其禁止自动生成列

this.dgvPeopleList.AutoGenerateColumns = false;//禁止自动生成列

③扩展属性

为了在界面列表中显示组织名称,在人员实体类中添加扩展属性

//扩展属性public string GroupName { get; set; }

2.4、添加人员功能

在添加人员类的添加人员按钮事件中编写实现方法;

基本思路:

1>在非空是否重复的数据验证后继续编写;

2>封装人员对象;

3>调用后台数据访问方法传递封装的对象;

①:封装人员对象代码

//封装人员对象People objPeople = new People(){PeopleName=this.txtPeopleName.Text.Trim(),Gender=this.rdoMale.Checked?"男":"女",Birthday=Convert.ToDateTime(this.dtpBirthday.Text),IdNumber=this.txtPeopleIdNo.Text.Trim(),PhoneNumber=this.txtPhoneNumber.Text.Trim(),Address=this.txtAddress.Text.Trim(),GroupId=Convert.ToInt32(this.cboGroupName.SelectedValue),GroupName=this.cboGroupName.Text,//为了列表展示Age=DateTime.Now.Year-Convert.ToDateTime(this.dtpBirthday.Text).Year,CarNo=this.txtCarNo.Text.Trim(),PeoImage=this.pbpeo.Image!=null?new Common.SerializeObjectToString().SerializeObject(this.pbpeo.Image):""};

②:调用后台数据访问方法

//调用后台数据访问方法try{ int peopleId = peopleServer.AddPeople(objPeople); if(peopleId>1) { //同步显示添加的学员 objPeople.PeopleId = peopleId; this.peoList.Add(objPeople); this.dgvPeopleList.DataSource = null; this.dgvPeopleList.DataSource = this.peoList; }}catch(Exception){ throw;}

03 常见问题

①练习过程中出现报错,关于某某附近语法错发的,检查SQL语句拼接是否正常,是否少空格;

②还遇到界面列表数据未显示,但数据库中查询已经存在添加的数据,这时候检查控件设置,绑定的列名是否一致;

04 后记

以上为将添加人员信息存储添加到数据库的实现,功能虽然实现了,但在用户体验,细节上还有值得优化的地方,后续接着练习效果优化;

大家在实际项目中是否遇到过相关的实现,可以在评论区或交流群讨论你开发过程中遇到的奇葩问题。

0 阅读:0

雅轩聊科技

简介:感谢大家的关注