How to use SqlBulkCopyColumnMappingCollection?
我想通过参数传递特定数据来制作一个可以用于所有批量插入的SqlBulkCopy方法。
现在我需要对其中一些进行映射。我不知道如何制作SqlBulkCopyColumnMappingCollection,因为那是我计划传入映射集合并使用它的计划。但是我不知道该怎么做。我无法为其创建新对象。
这就是我现在所拥有的。
如何添加映射以将其传递给它?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public void BatchBulkCopy(DataTable dataTable, string DestinationTbl, int batchSize) { // Get the DataTable DataTable dtInsertRows = dataTable; using (SqlBulkCopy sbc = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.KeepIdentity)) { sbc.DestinationTableName = DestinationTbl; // Number of records to be processed in one go sbc.BatchSize = batchSize; // Finally write to server sbc.WriteToServer(dtInsertRows); } } |
您不需要创建它的新实例-SqlBulkCopy类具有一个属性,该属性是可以使用的映射集合:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | public void BatchBulkCopy(DataTable dataTable, string DestinationTbl, int batchSize) { // Get the DataTable DataTable dtInsertRows = dataTable; using (SqlBulkCopy sbc = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.KeepIdentity)) { sbc.DestinationTableName = DestinationTbl; // Number of records to be processed in one go sbc.BatchSize = batchSize; // Add your column mappings here sbc.ColumnMappings.Add("field1","field3"); sbc.ColumnMappings.Add("foo","bar"); // Finally write to server sbc.WriteToServer(dtInsertRows); } } |
编辑:
基于注释,目标是创建通用功能,例如不必在函数中显式地对映射进行硬编码。由于无法实例化ColumnMappingCollection,因此建议将包含列映射定义的
1 2 3 | var columnMapping = new List<string>(); columnMapping.Add("field1,field3"); columnMapping.Add("foo,bar"); |
然后将函数重新定义为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | public void BatchBulkCopy(DataTable dataTable, string DestinationTbl, int batchSize, List<string> columnMapping) { // Get the DataTable DataTable dtInsertRows = dataTable; using (SqlBulkCopy sbc = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.KeepIdentity)) { sbc.DestinationTableName = DestinationTbl; // Number of records to be processed in one go sbc.BatchSize = batchSize; // Add your column mappings here foreach(var mapping in columnMapping) { var split = mapping.Split(new[] { ',' }); sbc.ColumnMappings.Add(split.First(), split.Last()); } // Finally write to server sbc.WriteToServer(dtInsertRows); } } |