web使用SQL方式导入数据

    科技2025-05-27  88

    数据上传是在平时写代码中经常要使用到的一个功能!用的最多的就是Excel方式导入和导出; 但是Excel导入的话,就有一点点的局限,就是对导入的数据大小有限制,数据太多,导入的时间就要很长,会超过SQL Server 2014 Management Studio的连接时间(连接超时):

    那么我们就需要一个更加大,更快的导入方式了!SQL Server 2014 Management Studio导入方法: 写法和Excel有点相同;这里写没有一段不一样的! 在导入的Excel表中添加需要的主要ID,用于后面直接匹配到数据库表里面; //==在dxExcel中 添加学院ID 专业ID 年级ID 班级ID 的列 dxExcel.Columns.Add(“academeID”, typeof(int)); dxExcel.Columns.Add(“gradeID”, typeof(int)); dxExcel.Columns.Add(“specialtyID”, typeof(int)); dxExcel.Columns.Add(“classID”, typeof(int));

    //遍历 根据名称匹配 学院ID 专业ID 年级ID 班级ID for (int i = 0; i < dxExcel.Rows.Count; i++) { DataRow row = dxExcel.Rows[i]; //创建student对象保存每一条数据 //获取学院ID和名称 //通过DataTable中的AcademeName到dbAcademe中查找对应的AcademeID(学院ID) string academeName = row["学院"].ToString().Trim(); int academeID = 0; try { academeID = dbAcademe.Where(p => p.academeName == academeName).Single().academeID; row["academeID"] = academeID; } catch (Exception e) { Debug.WriteLine(e); Msg.Text = string.Format("第{0}条数据 学院 无法匹配", i + 1); return Json(Msg, JsonRequestBehavior.AllowGet); } //获取专业ID和名称 //根据学院ID和专业名称获取相应的专业ID string specialtyName = row["专业"].ToString().Trim(); int specialtyID = 0; try { specialtyID = dbSpecialty.Where(p => p.academeID == academeID && p.specialtyName == specialtyName).Single().specialtyID; row["specialtyID"] = specialtyID; } catch (Exception e) { Debug.WriteLine(e); Msg.Text = string.Format("第{0}条数据 专业 无法匹配", i + 1); return Json(Msg, JsonRequestBehavior.AllowGet); } //获取班级ID和名称 //根据ID和年级名称获取相应的年级ID string gradeName = row["年级"].ToString().Trim(); int gradeID = 0; try { gradeID = dbGrade.Where(p => p.academeID == academeID && p.gradeName == gradeName).Single().gradeID; row["gradeID"] = gradeID; } catch (Exception e) { Debug.WriteLine(e); Msg.Text = string.Format("第{0}条数据 年级 无法匹配", i + 1); return Json(Msg, JsonRequestBehavior.AllowGet); } //获取年级ID和名称 //根据学院ID 专业ID及年级ID 班级名称获取相应的班级ID string className = row["班级"].ToString().Trim(); try { row["classID"] = dbClass.Where(p => p.academeID == academeID && p.specialtyID == specialtyID && p.gradeID == gradeID && p.className == className).Single().classID; } catch (Exception e) { Debug.WriteLine(e); Msg.Text = string.Format("第{0}条数据 班级 无法匹配", i + 1); return Json(Msg, JsonRequestBehavior.AllowGet); } //判断身份证是否正确 if (!IdCardHelper.CheckIdCard(row["身份证号"].ToString().Trim())) { Msg.Text = string.Format("第{0}个学生数据 身份证不正确", i + 1); return Json(Msg, JsonRequestBehavior.AllowGet); } }

    从这里连接上数据库;连接就是web项目连接数据库的那条,在(Web.config文件里面) //数据库连接字符串 data source=(local);initial catalog=SchoolManageSystem;user id=sa;password=sa123 string strConnect = “data source=DESKTOP-JB7TQ2D;initial catalog=SchoolManageSystem;user id=sa;password=123;”; //使用 System.Data.SqlClient.SqlBulkCopy using (SqlBulkCopy bulkCopy = new SqlBulkCopy(strConnect, SqlBulkCopyOptions.KeepIdentity | SqlBulkCopyOptions.UseInternalTransaction)) { //1、指定数据导入的目标表; bulkCopy.DestinationTableName = “dbo.[SYS_Student]”; //2、设置数据源(dtExcel)中的列名与目标表的字段的映射关系 bulkCopy.ColumnMappings.Add(“academeID”, “academeID”); bulkCopy.ColumnMappings.Add(“gradeID”, “gradeID”); bulkCopy.ColumnMappings.Add(“specialtyID”, “specialtyID”); bulkCopy.ColumnMappings.Add(“classID”, “classID”); bulkCopy.ColumnMappings.Add(“姓名”, “studentName”); bulkCopy.ColumnMappings.Add(“性别”, “studentSex”); bulkCopy.ColumnMappings.Add(“身份证号”, “studentIDNum”); bulkCopy.ColumnMappings.Add(“学号”, “studentNumber”); //3、将数据源数据写入到目标表中 bulkCopy.WriteToServer(dxExcel); }

    Msg.State = true; Msg.Text = "导入成功!"; } else { Msg.Text = "工作表为空,请您检查是否有写入数据!"; } } else { Msg.Text = "您选择的工作簿中,没有工作表,请检查!"; } } else { Msg.Text = "您选择的文件类型不正确,请检查!"; } } catch (Exception e) { Debug.WriteLine(e); Msg.Text = "上传文件类型不对,请检查是否有数据,是否有工作表,是否按照模板说明填写!"; } return Json(Msg, JsonRequestBehavior.AllowGet); }

    这个方法导入数据是不惧数量的大小的,无论是几千还是几万都可以快速的复制导入!速度相当的快!

    Processed: 0.010, SQL: 8