0

我搜索了几个与 SqlBulkCopy 和 ColumnMappings 相关的已发布问题,但找不到解决方案。我将 C# ASP .NET MS VS 2010 与 SQL Server 2008 R2 一起使用。

我一直在使用 SqlBulkCopy 来加载一个包含来自 DataTable Source 的数据的临时表。我想向我的 SqlBulkCopy 对象添加一个 ColumnMappings 属性,但由于我有这么多列,我试图避免在我的代码中列出我需要映射到数据库临时表中的列的所有 500 多列。

我需要使用 ColumnMappings 的原因是我必须删除和添加列,因此架构是动态的,这不是一个好的设计,但为此目的,我们的内部客户可以接受,他们了解风险。

我还将所有列名捕获到一个集合中。我不认为 ColumnMappings 方法将集合作为源和目标。

我曾考虑编写两个 SqlBulkCopy 对象来处理此问题,但不确定是否可行。另一种选择是使用 T-SQL ..

处理此问题的最佳方法是什么,或者您建议我探索什么解决方案?

 --set the connection string
//
 string strConn = ConfigurationManager.ConnectionStrings["CPDM"].ToString();  
//
SqlConnection scCPDM = new SqlConnection(strConn);
//
//
--create the SqlBulkCopy opbject
//
SqlBulkCopy bulkcopy = new SqlBulkCopy(strConn);
bulkcopy.BulkCopyTimeout = 3000;
bulkcopy.DestinationTableName = "CPDE_STAGING";
//
--need a to map all column mappings + new columns
--looking to do something like this -->  bulkcopy.ColumnMappings.Add(*,*);
--then this ----> bulkcopy.ColumnMappings.Add(new_column,new_table_column);
--for each new column

bulkcopy.WriteToServer(dtNewRaw);
4

1 回答 1

2

我最终使用了它并且效果很好。

            //sqlbulkcopy does a blind insert into the db table.
            //we have to add a column mapping property to tell
            //sqlbulkcopy how to map each column from source to destination correctly
            foreach (string sColumn in columnNamesNew)
            {
                string sNewColumn = sColumn.Replace(' ', '_');
                bulkcopy.ColumnMappings.Add(sColumn, sNewColumn);

            }
于 2013-06-12T20:25:58.780 回答