Excel表格导入到数据库

开发工具与关键技术:MVC
作者:文泽钦
撰写时间:2019年5月20日

上一篇我们写了excel表格上存保存到内存流,现在我们写把保存在内存流当中的数据保存到数据库中。

保存导入excel表格到数据库,步骤:点击保存到数据库按钮,打开加载成请求导入的路径,关闭加载成,关闭模态框,输出提示,刷新表格。

		//保存导入excel表格数据到数据库
        function saveImport() {
            //打开加载层
            var layIndex = layer.load();
            //请求保存导入数据的url
            $.post("SaveImport", function (Msg) {
                //关闭加载层
                layer.close(layIndex);
                //关闭模态框
                $("#modImportExaminee").modal("hide");
                //输出
                layer.alert(Msg, { icon: 0, title: "提示" });
                //刷新
                searchTabEmployee();
            });
        }

控制器这边的步骤:声明一个返回值为空,捕获异常,记录成功与失败的条数,判断工作 簿的数据是否为空,工作簿不为空则于数据库中的员工信息进行比较,判断是否于数据库中的员工信息重复,如果员工信息与数据库的不重复;这时要考虑先保存用户表,还先保存员工表,我们要新增一个用户信息,所以先保存用户表,再保存员工表。

public ActionResult SaveImport() {
    string strMsg = "";
       try{
                int successCount = 0;//记录保存成功的数据条数
                int oldCount = 0;//记录因于数据库已有数据重复而保存失败的数据条数
                List listEmployeeVo = new List();
                
                if (Session["ImportExcel"] != null)
                 {
                    listEmployeeVo = Session["ImportExcel"] as List;
                }
                for
                each (employeeVo employee in listEmployeeVo) 
                {
                    //判断数据是否与数据库中已有数据重复
                    //从数据库中的员工表开始查询
                    int countEmployee = (from tbEmployee in myModels.PW_Employee
                     //员工表的员工名字等于页面传过来的员工姓名或者
                    where tbEmployee.EmployeeName == employee.EmployeeName ||
                    //员工表中的员工编号等于页面传入的员工编号
                    tbEmployee.EmployeeNumber == employee.EmployeeNumber
                                         select tbEmployee).Count();
                                         
       //如果员工姓名,员工编号与数据库的不重复
       if (countEmployee == 0) 
       		{
           //新增用户表
           PW_User dbUser = new PW_User();
           //账号
           dbUser.UserNuber = employee.EmployeeNumber;
           //密码
           dbUser.Password = Common.AESEncryptHelper.Encrypt(employee.EmployeeNumber);
           
           //保存用户表到数据库
           myModels.PW_User.Add(dbUser);
                        if (myModels.SaveChanges() > 0)
                         {
							//获取员工id
                            var UserId = dbUser.UserID;
                            
                            //员工表
                            PW_Employee dbEmployee = new PW_Employee();
                            
                            //部门id
                            dbEmployee.DepartmentID = employee.DepartmentID;
                            
                            //职位id
                            dbEmployee.PositionID = employee.PositionID;
                            
                            //员工姓名
                            dbEmployee.EmployeeName = employee.EmployeeName;
                            
                            //员工编号等于页面传过来的员工编号
                            dbEmployee.EmployeeNumber = employee.EmployeeNumber;
                            
                            //电话
                            dbEmployee.Phone = employee.Phone;
                            
                            //手机
                            dbEmployee.Cellphone = employee.Cellphone;
                            
                            //地址
                            dbEmployee.Address = employee.Address;
                            
                            //备注
                            dbEmployee.Remark = employee.Remark;
                            
                            //员工表是根据用户id来保存的,用户id是索引
                            dbEmployee.UserID = UserId;
                            
                            //保存员工信息表
                            myModels.PW_Employee.Add(dbEmployee);
                            
                            //判断保存数据是否大于零
                            if (myModels.SaveChanges() > 0)
                             {
                                successCount++;
                            } 
                            else
                            {
                                strMsg = "员工表保存失败";
                            }
                        
                        }else
                        {
                            strMsg = "用户表保存失败";
                        }
                    }else
                    {
                        oldCount++;
                    }
                }
                strMsg = "导入成功,总共导入" + listEmployeeVo.Count() + "条数据,已经存在的数据有" + oldCount + "条,新增成功的数据有" + successCount + "条!";
            }
            catch (Exception e)
             {
                Console.WriteLine(e);
                strMsg = "数据异常!";
            }
            return Json(strMsg, JsonRequestBehavior.AllowGet);
        }

在保存员工表时为什么不用保存员工id,而是用户id,因为员工id是自增的,用户id是员工id的索引,所以保存员工表时用户表里的用户id要与员工表里的员工id保持一致;要是在保存员工表时没有获取用户id,控制器接收到所有要保存的数据了,但会直接跳到数据异常,所以用户id非常重要。
一会我们导入这两条准备好的数据,看看我们写的代码是否保存成功:
在这里插入图片描述
上存到内存流,点击导入到数据库:
Excel表格导入到数据库_第1张图片
Excel表格导入到数据库_第2张图片
这里提示保存成功两条,页面刷新了刚刚导入的数据已经在页面上的第一第二条显示了:
在这里插入图片描述

你可能感兴趣的:(Excel表格导入到数据库)