导入数据
导入数据
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
开发工具与关键技术:Visual Studio
作者:黄海浪
撰写时间:2019年6月5日
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
把Excel表格数据导入到数据库,首先得有个模板,为了方便使用导入功能,要有一个下载模板的功能
下载模板之后把需要的数据录入进去,然后就上传Excel表格到临时存放数据的地方确认无误后就保存到数据库
//遍历dataTable中的数据
foreach (DataRow row in dtExcel.Rows)
{
//创建studentVo对象保存每一条数据
studentVo student = new studentVo();
try
{
//获取学院ID 和学院名称
//通过dataTable中的AcademeName到dbAcademe中查找相应的AcademeID
student.AcademeName = row["学院"].ToString().Trim();
student.AcademeID = dbAcademe.Where(m => m.AcademeName == student.AcademeName).SingleOrDefault().AcademeID;
//获取专业id和名称
//根据学院ID和专业名称获取相应的专业ID
student.SpecialtyName = row["专业"].ToString().Trim();
student.SpecialtyID = dbSpecialty.Where(m => m.AcademeID == student.AcademeID && m.SpecialtyName == student.SpecialtyName).SingleOrDefault().SpecialtyID;
//获取年级ID 和名称
//根据学院ID以及年级名称获取相应的年级ID
student.GradeName = row["年级"].ToString().Trim();
student.GradeID = dbGrade.Where(m => m.AcademeID == student.AcademeID && m.GradeName == student.GradeName).SingleOrDefault().GradeID;
//获取 班级ID和名称
//根据学院ID&专业ID&年级ID&班级名称获取班级ID
student.ClassName = row["班级"].ToString().Trim();
student.ClassID = dbClass.Where(m => m.AcademeID == student.AcademeID && m.SpecialtyID == student.SpecialtyID && m.GradeID == student.GradeID && m.ClassName == student.ClassName).SingleOrDefault().ClassID;
student.StudentNumber = row["学号"].ToString().Trim();
student.StudentName = row["姓名"].ToString().Trim();
student.StudentIDNum = row["身份证号"].ToString().Trim();
student.StudentSex = row["性别"].ToString().Trim();
student.UserNuber = row["账号"].ToString().Trim();
//将每一条数据都添加到对象列表中
listStudentVo.Add(student);
ImportSuccess++;
}
catch (Exception)
{
returnJson.State = false;
returnJson.Text = "数据处理出错";
ImportFail++;
}
}
这是上传Excel表格数据的核心代码部分,通过foreach循环把每一条数据都添加到对象列表中,然后将数据保存到Session中
foreach (studentVo student in listStudentVo){
//判断数据是否与数据库中已有数据重复
int countStudent = (from tbStudent in myModels.PW_Student
where tbStudent.StudentIDNum == student.StudentIDNum ||
tbStudent.StudentNumber == student.StudentNumber
select tbStudent).Count();
if (countStudent == 0){
PW_User dbUser = new PW_User();//新增用户表
dbUser.UserNuber = student.StudentNumber; //账号
//密码
dbUser.Password=Common.AESEncryptHelper.Encrypt(student.StudentNumber);
dbUser.UniformAuthenticationCode = student.StudentNumber; //认证码
//保存
myModels.PW_User.Add(dbUser);
if (myModels.SaveChanges() > 0){
var UserId = dbUser.UserID;
//用户角色明细表
PW_UserRoleDetail dbUserRoleDetail = new PW_UserRoleDetail(); dbUserRoleDetail.UserID = UserId; //用户ID
dbUserRoleDetail.UserTypeID = 6; //用户类型ID
myModels.PW_UserRoleDetail.Add(dbUserRoleDetail); //保存
myModels.SaveChanges();
//学生表
PW_Student dbStudent = new PW_Student();
dbStudent.AcademeID = student.AcademeID;
dbStudent.SpecialtyID = student.SpecialtyID;
dbStudent.GradeID = student.GradeID;
dbStudent.ClassID = student.ClassID;
dbStudent.StudentIDNum = student.StudentIDNum;
dbStudent.StudentName = student.StudentName;
dbStudent.StudentSex = student.StudentSex;
dbStudent.StudentNumber = student.StudentNumber;
dbStudent.UserID = UserId;
dbStudent.StudentState = "应届";
myModels.PW_Student.Add(dbStudent);
if (myModels.SaveChanges() > 0){
successCount++;
}
else{
strMsg = "学生表保存失败!";
}
}
else{
strMsg = "用户表保存失败!";
}
}
else{
oldCount++;
}
}
保存数据到数据库是从Session中获取到数据通过foreach循环保存到数据库,保存又看数据是在哪些表当中,然后分别保存到表中,还要注意一下保存的先后顺序,批量导入就实现了。