1

我正在使用 SqlBulkCopy 将电子表格中的记录导入 SQL Server 数据库。

大容量复制操作在大多数情况下都能正常工作。然而,它正在做一些我无法理解的事情。

我在列映射中定义了一个列:

bCopy.ColumnMappings.Add("Amount", "Amount");

在电子表格中,这是一个 varchar,就像在我的工作表中一样(在将数据移动到我的活动表之前,我导入到工作表以进行一些验证)。

在测试时,我进入了一条记录并将值从数字更改为单词 FOO。然后我运行我的导入。

我的验证例程正确识别了列的问题 - 但这是因为该列为空,而不是因为该值不是数字。当我检查数据库时,我发现这个字段被导入了一个空值。我认为该值应该是 FOO。

这让我觉得有点奇怪。

如果有任何区别,我将使用 OLEDB 像访问数据库表一样访问电子表格,并将 OLEDBDataReader 作为源传递到我的 BulkCopy 对象中。

OLEDB 驱动程序是否足够聪明,可以意识到这不是该列中的有效值?我认为默认情况下一切都是字符串/varchar。(我们不对电子表格中的列数据类型进行任何修改)

编辑

我已经按照建议检查了 dataReader - 很奇怪,当我将 Amount 字段更改为具有字符串值时,datareader 中的值为 null。这是我第一次在 Excel 数据阅读器中看到这种行为。其他字符串字段工作得很好。

4

1 回答 1

1

我通过将 IMEX=1 添加到我的 OLEDB 连接字符串来解决此问题。现在该值显示在数据读取器中。(我想我需要这样做来支持混合值列)

于 2013-09-11T11:46:51.050 回答