能实现一对多关联的通用EXCEL导入功能

      发一个本人写的通用EXCEL导入功能,看了一下其他人发过的类似功能的导入组件,相比起来,我写的这个优点在于,能实现数据的一对一、一对多关联;直接使用SQL语句插入数据,不用通过实体类,执行效率会高一些。缺点在于,需要进行XML文件的配置,会有点麻烦。

      首先举例说下使用方法。要导入以下两个EXCEL文件

--------student.xls--------------

  学号     姓名     性别
2010001     张三     男
2010002     李四     女

------------sex.xls---------------

代码       标题

 1            男

 2            女

其中学生信息表中的性别字段为外键,XML配置如下

EXCEL文件与数据表映射关系excel-table-mapping.xml

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是使用C#语言实现Excel中的数据导入一对多或多对多关系的示例代码: ```csharp using System.Data; using System.Data.SqlClient; using System.IO; using System.Linq; using ExcelDataReader; public void ImportExcelData(string excelFilePath) { // 读取Excel文件 using (var stream = File.Open(excelFilePath, FileMode.Open, FileAccess.Read)) { using (var reader = ExcelReaderFactory.CreateReader(stream)) { // 获取Excel文件中的所有表格 var result = reader.AsDataSet(new ExcelDataSetConfiguration() { ConfigureDataTable = (_) => new ExcelDataTableConfiguration() { UseHeaderRow = true } }); // 获取第一个表格中的数据,并插入到数据库中的实体表格中 var entityTable = result.Tables[0]; foreach (DataRow row in entityTable.Rows) { var entityValue1 = row["EntityValue1"].ToString(); var entityValue2 = row["EntityValue2"].ToString(); // 在数据库中插入实体数据,并获取实体ID var entityId = InsertEntityData(entityValue1, entityValue2); // 获取第二个表格中该实体对应的多实体数据,并插入到数据库中的多实体表格中 var multiEntityTable = result.Tables[1]; var entityMultiRows = multiEntityTable.AsEnumerable() .Where(r => r.Field<string>("EntityValue1") == entityValue1 && r.Field<string>("EntityValue2") == entityValue2); foreach (var multiEntityRow in entityMultiRows) { var multiEntityValue1 = multiEntityRow["MultiEntityValue1"].ToString(); var multiEntityValue2 = multiEntityRow["MultiEntityValue2"].ToString(); // 在数据库中插入多实体数据,并关联实体ID InsertMultiEntityData(entityId, multiEntityValue1, multiEntityValue2); } } } } } public int InsertEntityData(string entityValue1, string entityValue2) { var connectionString = "Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;"; var query = "INSERT INTO EntityTable (EntityValue1, EntityValue2) VALUES (@EntityValue1, @EntityValue2); SELECT SCOPE_IDENTITY();"; using (var connection = new SqlConnection(connectionString)) { connection.Open(); using (var command = new SqlCommand(query, connection)) { command.Parameters.AddWithValue("@EntityValue1", entityValue1); command.Parameters.AddWithValue("@EntityValue2", entityValue2); // 执行命令,并获取实体ID var entityId = Convert.ToInt32(command.ExecuteScalar()); return entityId; } } } public void InsertMultiEntityData(int entityId, string multiEntityValue1, string multiEntityValue2) { var connectionString = "Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;"; var query = "INSERT INTO MultiEntityTable (EntityId, MultiEntityValue1, MultiEntityValue2) VALUES (@EntityId, @MultiEntityValue1, @MultiEntityValue2);"; using (var connection = new SqlConnection(connectionString)) { connection.Open(); using (var command = new SqlCommand(query, connection)) { command.Parameters.AddWithValue("@EntityId", entityId); command.Parameters.AddWithValue("@MultiEntityValue1", multiEntityValue1); command.Parameters.AddWithValue("@MultiEntityValue2", multiEntityValue2); // 执行命令 command.ExecuteNonQuery(); } } } ``` 以上代码示例中,`ImportExcelData`方法用于读取Excel文件并将数据插入到数据库中,`InsertEntityData`方法用于插入实体数据并获取实体ID,`InsertMultiEntityData`方法用于插入多实体数据并关联实体ID。你需要根据实际情况修改连接字符串、表格名称、列名称等参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值