【发布时间】:2017-03-27 16:09:22
【问题描述】:
我有一个包含大量数据和一百多列的列表。我必须将整个列表转换为 DataTable 并使用SQLBulkCopy 将所有数据批量插入数据库。
一切都很好,只是有些字段可能为空。并且由于某种原因,某些空字段在转换为 DataTable 后以及在SQLBulkCopy 插入期间会导致一些格式异常。经过一番研发,我发现将空字段转换为NULL可以解决使用SQLBulkCopy批量插入的问题。
在将列表转换为 DataTable 之前,有什么方法可以使用 LINQ 查找列表中的空字段并将它们转换为 NULL 或 DBNULL?
即使我要将列表转换为 DataTable,但我不想循环每一行和每个单元格以检查单元格是否为空并转换为 null,因为它会在数据时对性能产生很大影响太多了。
【问题讨论】:
-
@MrinalKamboj:这是关于将空的 sequence 转换为单项序列,其中项是元素类型的默认值。根本不是一回事。
-
发布表架构、数据样本和完整异常。是否违反约束?无效的演员表?还有什么?如果基础表是
nvarchar或varchar表,您不必 将空字符串转换为NULL。存储 null 是一种 hack - 你根本不存储任何东西,而不是解决问题。期望字段包含空字符串的应用程序或查询将崩溃或产生错误结果 -
您是否正在尝试将字符串存储到数字字段中?
-
@JonSkeet,感谢您指出我的错误,不正确的 API,用于加入操作
-
空字符串从何而来?它可能是 CSV 中的缺失值吗?在这种情况下,您可以修改 csv 读取代码,为缺少的数值返回 NULL,甚至可以直接将值转换为可为空的数字
标签: c# linq sqlbulkcopy