首页 > 学院 > 开发设计 > 正文

SqlBulkCopy excel 字段映射解决办法一 修改中间件datatable 的 ColumnName 使之 与 目标表一致

2019-11-17 03:08:45
字体:
来源:转载
供稿:网友

SqlBulkCopy Excel 字段映射解决办法一 修改中间件datatable 的 ColumnName 使之 与 目标表一致

利用SqlBulkCopy导入Excel数据库

由于最近的项目需要大量的数据从Excel导入到SQLServer数据库当中,数据量非常大,综合考滤了一下,采用SqlBulkCopy进行数据的导入。

由于Excel表中的表头,与数据库中的字段是不一样的,所以需要添加映射。之前在这个地方走了许多弯路。项目实际情况如下。

项目中内容的呈现是用中文,而数据表头是英文的。刚开始时是直接从Excel表中读出数据,生成DataTable,添加自定义列(Excel中不存在姓名、用户ID等),添加数据列表,然后直接修改DataTable的ColumnName,然后直接给SqlBulkCopy去更新到数据库。结果出现错误,无法从String类型转到Int,由于通过修改ColumnName,两张表的结构是一致的,茫然了一阵。

通过分析,由于自己数据库中的Id是自动增长的,而使用SqlBulkCopy时却没有没有指定去映射相对应的表头,所以造成这个问题。添加sqlBulkCopy.ColumnMappings即可解决。

结果导入成功后,却发现有些数据是无法呈现,从过查找,发现Excel表中的单元格出现错误提醒“此单元格的数字为文本格式”。找了资料发现需要修改服务器的注册表。相关的文章已经发布。

只贴关键代码

--------------------------------------

ccl:ColumnMappings映射

tablename:需更新的表名

dataTable:导入的数据表

publicstaticintSqlBulkCopyInsert(stringtablename,DataTabledataTable,Hashtableccl) { SqlBulkCopysqlBulkCopy=newSqlBulkCopy(T.getcs("")); foreach(stringstrinccl.Keys) { sqlBulkCopy.ColumnMappings.Add(str,ccl[str].ToString()); } sqlBulkCopy.DestinationTableName=tablename; if(dataTable!=null&&dataTable.Rows.Count!=0) { sqlBulkCopy.WriteToServer(dataTable); sqlBulkCopy.Close(); returndataTable.Rows.Count; } else { sqlBulkCopy.Close(); return0; }

}

--------------------------------------------


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表