【问题标题】:Column Name does not match with any column in datasource列名与数据源中的任何列都不匹配
【发布时间】:2018-03-10 13:06:42
【问题描述】:

我有以下数据表:-

我有下面的 SQL 表 Product:

数据表中的ITEM CODE是SQL中的ProductCode

数据表中的 CLOSING(图像中的最后一列)是 SQL 中的Quantity

我想根据 SQL 中的 CLOSING(数量)更新 ITEM CODE。

我写了这个批量更新函数:

using (SqlBulkCopy bcSQL = new SqlBulkCopy(con))
{
    bcSQL.DestinationTableName = "Product";

    // Map Source column name to Destination Column name
    // Src Column is in your DataTable
    // Dest Column is column name available in your SQL Table
    bcSQL.ColumnMappings.Add(" ITEM CODE", "ProductCode");
    bcSQL.ColumnMappings.Add(" Closing", "Quantity");

    bcSQL.WriteToServer(dt);
}

但我收到此错误:

给定的 ColumnName 'ITEM CODE' 与数据源中的任何列都不匹配。

请帮忙 - 我该如何解决这个问题?

【问题讨论】:

  • 猜测是因为我没有使用 SqlBulkCopy,但在命名列时尝试不使用空格 ' '。我知道过去这给我带来了麻烦。请改用_ 并再次尝试代码。这又是一个疯狂的猜测,但在其他人来之前,你有一些东西可以尝试。
  • 你能检查一下 dt 中的列名,看看它们是否和你在第一张图片中看到的一样吗?
  • 即使消息是关于列名的,问题也可能出在数据中。检查数据类型和长度是否匹配。当数据为 NULL 时,还要检查默认值。最后,检查这些列中是否没有身份密钥。看看this answer
  • 同样,不相关,但您可能应该为 " CLOSING" 映射使用大写。
  • 谢谢你们两个间距是问题

标签: c# .net


【解决方案1】:

由于我是从 Excel 填写数据表,我没有注意到列名中的空格。

列名后有2个空格

当我修改它时:-

bcSQL.ColumnMappings.Add("ITEM CODE  ", "ProductCode"); //2 spaces

解决了。

关键问题:- 评论部分中提到的列名

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-13
    • 2020-12-26
    • 2015-03-28
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    相关资源
    最近更新 更多