多表连接的数据新增

多表连接的数据新增

开发工具与关键技术:VisualStudio MVC
作者:老龙
撰写时间:2019/4/18

下面就以新增学生数据为例介绍多表连接的新增。比如在一个已经查询好的表格里新增一条学生信息,里面包括学生的班级、姓名、性别、身份证号、学生个人照片等诸如此类的信息。
一、 控制器方法总结:

public ActionResult InsertExaminee(FormCollection form, HttpPostedFileBase file)
        {        控制器方法
            ReturnJson msg = new ReturnJson();
            int AcademeID = Convert.ToInt32(form["AcademeID"]);
            int SpecialtyID = Convert.ToInt32(form["SpecialtyID"]);
            int GradeID = Convert.ToInt32(form["GradeID"]);
            int ClassID = Convert.ToInt32(form["ClassID"]);
            string StudentName = form["StudentName"].Trim();
            string StudentSex = form["StudentSex"].Trim();
            string StudentIDNum = form["StudentIDNum"].Trim();
            string StudentNumber = form["StudentNumber"].Trim();
            string UniformAuthenticationCode = form["UniformAuthenticationCode"].Trim();
            try
            {
                //判断学号 和 身份证是否已经存在
                int hasStudent = (from tbStudent in myModel.PW_Student
                                  where tbStudent.StudentNumber == StudentNumber
                                        || tbStudent.StudentIDNum == StudentIDNum
                                  select tbStudent).Count();
                if (hasStudent == 0) //可以进行新增操作
                {
                    #region 新增用户
                    Models.PW_User modUser = new Models.PW_User();//用户
                    modUser.UserNuber = StudentNumber;//用户编号
                    modUser.Password = Common.AESEncryptHelper.Encrypt(UniformAuthenticationCode);
                    modUser.UniformAuthenticationCode = UniformAuthenticationCode;//统一认证码
                    modUser.ToVoidNo = true;//是否作废 不作废
                    myModel.PW_User.Add(modUser);
                    myModel.SaveChanges();
                    #endregion
                    #region 新增学生
                    var InUserID = modUser.UserID;//获取新增用户的ID
                    Models.PW_Student modStudent = new Models.PW_Student();
                    if (InUserID != 0)
                    {
                        if (file != null)
                        {
                            byte[] newFile = new byte[file.ContentLength];
                            file.InputStream.Read(newFile, 0, file.ContentLength);
                            modStudent.StudentPicture = newFile;
                        }
                        modStudent.UserID = InUserID;//用户ID
                        modStudent.ClassID = ClassID;//班级ID
                        modStudent.GradeID = GradeID;//年级ID
                        modStudent.SpecialtyID = SpecialtyID;//专业ID
                        modStudent.AcademeID = AcademeID;//学院ID
                        modStudent.StudentName = StudentName;//学生姓名
                        modStudent.StudentSex = StudentSex;//学生性别
                        modStudent.StudentIDNum = StudentIDNum;//身份证号
                        modStudent.StudentNumber = StudentNumber;//学号
                        myModel.PW_Student.Add(modStudent);//
                        myModel.SaveChanges();
                        //新增用户明细
                        Models.PW_UserRoleDetail modUserRoleDetail = new Models.PW_UserRoleDetail();
                        var UserTypeID = (from tbUserType in myModel.SYS_UserType
                                          where tbUserType.UserType == "学生"
                                          select new
                                          {
                                              tbUserType.UserTypeID//用户类型ID
                                          }).ToList();
                        modUserRoleDetail.UserID = InUserID;//用户ID
                        modUserRoleDetail.UserTypeID = Convert.ToInt32(UserTypeID[0].UserTypeID);
                        myModel.PW_UserRoleDetail.Add(modUserRoleDetail);
                        myModel.SaveChanges();
                        msg.State = true;
                        msg.Text = "该学生的数据新增成功!";
                    }
                    #endregion
                }
                else {//有学生存在
                    msg.Text = "该数据已经存在,不能新增!";
                }
            }
            catch (Exception)
            {
                msg.Text = "数据异常请检查数据!";
            }
            return Json(msg,JsonRequestBehavior.AllowGet);
        }
        
        页面方法
         function saveStuInfor() {
            var AcademeID = $("#modAcademe").val();
            var SpecialtyID = $("#modSpecialty").val();
            var GradeID = $("#modGrade").val();
            var ClassID = $("#modClass").val();
            var StudentName = $("input[name='StudentName']").val();
            var StudentSex = $("input[name='StudentSex']").val();
            var StudentIDNum = $("input[name='StudentIDNum']").val();
            var StudentNumber = $("input[name='StudentNumber']").val();
            var UniformAuthenticationCode = $("input[name='UniformAuthenticationCode']").val().trim();
            var file = $("#fileImage").get(0).files[0];//获取学生头像img
            var StuPicture = $("#StuPicture").attr("src");
            if (StuPicture=="") {
                layer.alert("请选择图片文件", { icon: 1 });
                return false;
            }
            if (AcademeID != 0 && SpecialtyID != 0 && GradeID != 0 && ClassID != 0 && StudentName != "" &&
                StudentSex != 0 && StudentIDNum != "" && StudentNumber != "" && UniformAuthenticationCode != "") {
                if (blInsert) { //新增考生信息数据操作
                    //直接用fd=new FormData(document.getElementById('id'));这种方式可以省去append()方法挨个添加
                    var formData = new FormData(document.getElementById("frmStuInfor"));
                    var xhr;
                    if (window.XMLHttpRequest) {
                        // code for IE7+, Firefox, Chrome, Opera, Safari
                        xhr = new XMLHttpRequest();
                    } else {
                        // code for IE6, IE5
                        xhr = new ActiveXObject("Microsoft.XMLHTTP");
                    }
                    xhr.open("POST", "InsertExaminee");
                    xhr.send(formData);
                    xhr.onreadystatechange = function () {
                        if (xhr.readyState == 4 && xhr.status == 200) {
                            var txt = xhr.responseText;//返回一个json对象
                            var jsObj = JSON.parse(txt);///json对象转换为js对象
                            if (jsObj.State) {//jsObj.State判断数据是否修改成功
                                $("#modStudent").modal("hide");//关闭模态窗体
                                layer.alert(jsObj.Text, { icon: 1, offset: '150px', skin: 'layui-layer-molv', closeBtn: 0 });//弹出提示框
                                //tabAcademe = layuiTable.reload('tabAcademe');//表格刷新
                                tabStudentSearch();
                            } else {
                                layer.alert(jsObj.Text, { icon: 5, offset: '150px' });//弹出提示框
                            }
                        }
                    }
                }
             }
  1. 实例化实体类,用来记录新增数据的成功或者失败的状态信息。

  2. 传输参数。在控制器里声明两个参数form和file,一个用来接收页面方法提交的from表单,一个接收图片文件。

  3. 查询重复。身份证号与学号是唯一的,所以可以查询身份证号是否已经存在,若是已经存在则不执行新增操作并返回提示。否则执行新增操作。

  4. 新建用户临时表保存新增用户的账号、密码、作废状态等信息,再将该表添加进用户表,记录数据的变化状态。

  5. 获取新增用户的ID,新建临时学生表接收学生个人信息。

  6. 判断学生头像的图片文件是否为空,若是不为空则建立一个数组接收图片,并重新读取图片获取文件的长度,生成一个新的图片文件。

  7. 将学生的姓名,性别,身份证号等个人信息存入临时的学生表,将临时学生表保存到学生数据总表,记录新增数据变化状态。

  8. 新建临时用户信息明细表,查询用户类型为学生的数据,将查询出来的用户ID赋值给之前新建的用户ID,临时用户信息明细表存入用户信息明细总表,记录新增数据变化状态。
    二、页面方法保存新增:

1.获取form内输入的所有数据,选取的学生头像图片。判断form的所有输入框、下拉框等是否都有输入数据,还有学生的头像图片是否有选取,若是有任何一个数据为空时就提示数据输入不完整,不执行新增操作。
2. 用变量接收form表单的数据。直接用fd=new FormData(document.getElementById(‘id’)
的方式可以省去qppend()方法挨个添加。
3. 保存新增数据。接下来使用最原始的AJAX XHR方法进行数据的新增保存。

AJAX XHR方法:

  1. XHR创建对象。为了应对所有的现代浏览器,包括 IE5 和 IE6,请检查浏览器是否支持 XMLHttpRequest 对象。如果支持,则创建 XMLHttpRequest 对象。如果不支持,则创建 ActiveXObject

  2. XHR请求。如需将请求发送到服务器,我们使用 XMLHttpRequest 对象的 open() 和 send() 方法。Open(method,url,async)规定了请求的类型URL以及是否异步处理请求。其中method:请求的类型;GET 或 POST;url:在服务器的位置;async:true(异步)或 false(同步)。Send(sthing)将请求发送到服务器;shing:仅用于post请求

  3. XHR响应。如需获得来自服务器的响应,请使用 XMLHttpRequest 对象的 responseText 或 responseXML 属性。如果来自服务器的响应并非 XML,则使用 responseText 属性,responseText 属性返回字符串形式的响应。如果来自服务器的响应是 XML,而且需要作为 XML 对象进行解析,请使用 responseXML 属性:

  4. XHR readyState。Onreadystatechange事件:存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。readyState:存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。(0: 请求未初始化;1: 服务器连接已建立;2: 请求已接收;3: 请求处理中;4: 请求已完成,且响应已就绪)。Status(200: “OK”;404:未找到页面)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值