使用SqlbulkcopycolumnMapping将数据从数据表复制到sql数据库

时间:2019-02-08 20:14:22

标签: c# sql datatable

我正在尝试在映射列的同时将列从Datatable映射到SQL database.Table。但是我一直收到这个错误

“ System.InvalidOperationException:'给定的ColumnName'FobID'与数据源中的任何列都不匹配。'

使用波纹管查看代码。

using(SqlBulkCopy sqlcopyTFobs = new SqlBulkCopy(destCNS))
                {
                    sqlcopyTFobs.DestinationTableName = "[dbo].[TFobs]";

                    SqlBulkCopyColumnMapping mapFodID = new SqlBulkCopyColumnMapping("FobID", "FobID");
                    sqlcopyTFobs.ColumnMappings.Add(mapFodID);

                    sqlcopyTFobs.WriteToServer(dtTPositions);
                }

如果我使用以下代码复制所有列,则会复制所有数据。但是我只需要复制某些列。

using(SqlBulkCopy sqlcopyTFobs = new SqlBulkCopy(destCNS))
                {
                    sqlcopyTFobs.DestinationTableName = "[dbo].[TFobs]";

                    sqlcopyTFobs.WriteToServer(dtTPositions);
                }

1 个答案:

答案 0 :(得分:0)

请注意,列映射区分大小写。您可以从from MS网站获得一些指导。这是那里的简短段落

  

列映射定义了数据源和目标表之间的映射。

     

如果未定义映射-即ColumnMappings集合为空->列将根据顺序位置隐式映射。为了使它起作用,源和>目标架构必须匹配。如果不这样做,将抛出InvalidOperationException。

     

如果ColumnMappings集合不为空,则不必指定数据源中存在的每一列。那些未由集合映射的对象将被忽略。

     

您可以按名称或顺序引用源和目标列。您还可以在同一映射集合中混合按名称和按列引用。

看起来您的映射不正确。

如果您尝试从复制中删除某些字段,请参阅有关stackoverflow Skip some columns in SqlBulkCopy

的这篇文章