导入数据

                                              导入数据

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

开发工具与关键技术: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循环保存到数据库,保存又看数据是在哪些表当中,然后分别保存到表中,还要注意一下保存的先后顺序,批量导入就实现了。