SqlBulkCopy excel 字段映射解决办法一 修改中间件datatable 的 ColumnName 使之 与 目标表一致
2014-05-22 17:37
399 查看
利用SqlBulkCopy导入Excel数据库
由于最近的项目需要大量的数据从Excel导入到SQL Server数据库当中,数据量非常大,综合考滤了一下,采用SqlBulkCopy进行数据的导入。由于Excel表中的表头,与数据库中的字段是不一样的,所以需要添加映射。之前在这个地方走了许多弯路。项目实际情况如下。
项目中内容的呈现是用中文,而数据表头是英文的。刚开始时是直接从Excel表中读出数据,生成DataTable,添加自定义列(Excel中不存在姓名、用户ID等),添加数据列表,然后直接修改DataTable的ColumnName,然后直接给SqlBulkCopy去更新到数据库。结果出现错误,无法从String类型转到Int,由于通过修改ColumnName,两张表的结构是一致的,茫然了一阵。
通过分析,由于自己数据库中的Id是自动增长的,而使用SqlBulkCopy时却没有没有指定去映射相对应的表头,所以造成这个问题。添加sqlBulkCopy.ColumnMappings即可解决。
结果导入成功后,却发现有些数据是无法呈现,从过查找,发现Excel表中的单元格出现错误提醒“此单元格的数字为文本格式”。找了资料发现需要修改服务器的注册表。相关的文章已经发布。
只贴关键代码
--------------------------------------
ccl:ColumnMappings映射
tablename:需更新的表名
dataTable:导入的数据表
public static int SqlBulkCopyInsert(string tablename, DataTable dataTable, Hashtable ccl) { SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(T.getcs("")); foreach (string str in ccl.Keys) { sqlBulkCopy.ColumnMappings.Add(str, ccl[str].ToString()); } sqlBulkCopy.DestinationTableName = tablename; if (dataTable != null && dataTable.Rows.Count != 0) { sqlBulkCopy.WriteToServer(dataTable); sqlBulkCopy.Close(); return dataTable.Rows.Count; } else { sqlBulkCopy.Close(); return 0; }
}
--------------------------------------------
相关文章推荐
- 使用Mybatis时实体类属性名和表中的字段名不一致导致结果无法映射到实体类的解决办法
- SqlBulkCopy excel 字段映射解决办法二 使用数字索引代替 字段名称 做映射 避免字段中有中文 大小写等情况
- oracle 修改某字段小数位精度 需要字段未empty的解决办法
- [解决办法]Python中使用json.loads解码字符串时出错:ValueError: Expecting property name: line 1 column 2 (char 1)
- MyBatis关联查询,表字段相同,resultMap映射问题的解决办法
- C#中DataGridView绑定了DataTable后,通过代码修改DataGridView中的数据,总有一行(被修改过并被用户选中的行集合中索引为0的行)不能被UpDate回数据库的问题和解决办法
- MyBatis关联查询,表字段相同,resultMap映射问题的解决办法
- 修改hosts--目标文件夹访问拒绝解决办法
- django1.8 修改数据库 时间字段 遇到非空问题的解决办法
- Data too long for column 'name' at row 1 mysql的抛出异常的解决办法
- 存储过程提示临时表字段不存在的解决办法--直接修改临时表的名称,用唯一值作为名称
- /doreg.jsp (line: 11, column: 0) Expecting "jsp:param" standard action with "name" and "value" attributes 错误解决办法
- Mybatis中实体类中的字段跟对应表的字段不一致时解决办法
- MyBatis关联查询,表字段相同,resultMap映射问题的解决办法
- Data too long for column 'name' at row 1 mysql的抛出异常的解决办法--之前方法不管用-要设置数据库编码
- data too long for column 'name' at row 1的解决办法
- [解决办法]Python中使用json.loads解码字符串时出错:ValueError: Expecting property name: line 1 column 2 (char 1)
- SSH整合项目修改字段不成功但页面可以跳转解决办法
- Mybatis实体类属性与数据库字段不一致解决办法