开发工具与关键技术: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<employeeVo> listEmployeeVo = new List<employeeVo>();
if (Session["ImportExcel"] != null)
{
listEmployeeVo = Session["ImportExcel"] as List<employeeVo>;
}
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非常重要。
一会我们导入这两条准备好的数据,看看我们写的代码是否保存成功:
上存到内存流,点击导入到数据库:
这里提示保存成功两条,页面刷新了刚刚导入的数据已经在页面上的第一第二条显示了: