开发工具与关键技术:Visual Studio ASP.NET MVC
作者:刘剑鸿
撰写时间:2019年05月13日 星期一
程序员的日常操作—多表新增数据
单表新增与多表新增的操作步骤大同小异,都要运用到传递过来的参数,就是从页面新增传递过来的数据。接下来我们要在控制器里进行四步操作。1判断传递过来的数据是否为空。2判断数据是否在数据库已经存在。3执行新增操作。4将新增的数据保存到数据库。步骤和单表的新增操作没什么不同,不过在多表新增操作里,并不是多张数据表一起新增,而是一张一张的新增。重点是要会判断先增哪张表。下面是两张关系表:
这两张关系表里很清楚的看到,用户表里面的主键(用户ID)作为学生表和用户角色明细表里面的外键.所以我们就先新增用户表,在新增学生表、用户明细表。其代码如下:
public ActionResult InsertStudent(PW_Student pwStudent, PW_User pwUser, HttpPostedFileBase fileStudentImage)
{
ReturnJson returnJson = new ReturnJson();
try//判断新增的学生是否已经存在
{
var studentCount = (from tbStudent in myModels.PW_Student
where tbStudent.studentID == pwStudent.studentID
|| tbStudent.StudentIDNum == pwStudent.StudentIDNum
|| tbStudent.StudentNumber == pwStudent.StudentNumber
select tbStudent).Count();
if (studentCount == 0)
{ //第一张表:用户表
//判断账号是否重复
var userCount = (from tbUser in myModels.PW_User
where tbUser.UserNuber ==pwStudent.StudentNumber
|| tbUser.UniformAuthenticationCode == pwUser.UniformAuthenticationCode
select tbUser).Count();
if (userCount == 0)
{//一、新增用户表
//学生账号与学号一致
pwUser.UserNuber = pwStudent.StudentNumber;
//密码与学号一致,密码要加密
pwUser.Password =Common.AESEncryptHelper.Encrypt(pwStudent.StudentNumber);
pwUser.ToVoidNo = true;//有效账号
myModels.PW_User.Add(pwUser);
if (myModels.SaveChanges() >0)
{
var userId =
pwUser.UserID;
//二、新增学生表 //声明一个byte[](字节型数组)来保存新增的图片
byte[] imgFile = null;
if (fileStudentImage != null && fileStudentImage.ContentLength > 0)
{ //初始化数组的长度,为节省空间,长度由实际上传的图片的长度决定
imgFile = new byte[fileStudentImage.ContentLength];
//读取该图片文件 将图片转为流结束位置 将流读取为byte[],参数:byte[],读取开始位置,读取字节数
fileStudentImage.InputStream.Read(imgFile, 0, fileStudentImage.ContentLength);
}
pwStudent.UserID = userId;//用户ID
pwStudent.StudentPicture = imgFile;//图片
pwStudent.StudentState = "应届";
myModels.PW_Student.Add(pwStudent);
//三、新增用户角色明细表
PW_UserRoleDetail pwUserRoleDetail = new PW_UserRoleDetail();
pwUserRoleDetail.UserID = userId;
pwUserRoleDetail.UserTypeID =
6; //对应数据库的类型:6:表示学生
myModels.PW_UserRoleDetail.Add(pwUserRoleDetail);
myModels.SaveChanges();
returnJson.State = true;
returnJson.Text = "保存考生信息成功!";
}
else
{
returnJson.State = false;
returnJson.Text = "该账号保存失败!";
}
}
else
{
returnJson.State = false;
returnJson.Text = "该账号或统一认证码已经存在!";
}
}
else
{
returnJson.State = false;
returnJson.Text = "该学生信息已经存在,不需要重复输入数据!";
}
}
catch (Exception e)
{
Console.WriteLine(e);
returnJson.State = false;
returnJson.Text = "数据异常!";
}
return Json(returnJson, JsonRequestBehavior.AllowGet);
}
而在视图里,保存多表新增数据操作和单表新增数据操作原理没什么不同。主要有五步操作,1 //获取在输入框的输入数据2判断输入框的数据不为空3进行异步提交4关闭模态框5刷新一下表格。其代码如下:
$("#btnSaveInsert").click(function () { //获取页面数据
var AcademeID = $("#formInsertExaminee [name='AcademeID']").val();//学院ID
var SpecialtyID = $("#formInsertExaminee[name='SpecialtyID']").val();//专业ID
var GradeID = $("#formInsertExaminee [name='GradeID']").val();//年级ID
var ClassID = $("#formInsertExaminee [name='ClassID']").val();//班级ID
var StudentIDNum = $("#formInsertExaminee [name='StudentIDNum']").val();//身份证
var StudentNum = $("#formInsertExaminee [name='StudentNumber']").val();//学号
var UniformAuthenticationCode = $("#formInsertExaminee[name='UniformAuthenticationCode']").val();//统一认证码
var StudentName = $("#formInsertExaminee [name='StudentName']").val();//姓名
if (AcademeID > 0 && SpecialtyID > 0 && GradeID > 0 && ClassID > 0 && StudentNum != "" &&UniformAuthenticationCode != "" && StudentName != "") { //必选项
var layerIndex = layer.load(0); //显示加载层
$("#formInsertExaminee").ajaxSubmit(function (returnJson) {//新的提交方法
layer.close(layerIndex); //关闭加载层
if (returnJson.State == true) {//关闭模态框
$("#modInsertExaminee").modal("hide");
tabStudentSearch();//刷新table }
layer.alert(returnJson.Text, { icon: 0,title: '提示' });//提示
});
}
})
备注:视图里的代码都是运用jQuery的代码。