Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQLBulk从电子表格复制_C#_Asp.net_Sqlbulkcopy - Fatal编程技术网

C# SQLBulk从电子表格复制

C# SQLBulk从电子表格复制,c#,asp.net,sqlbulkcopy,C#,Asp.net,Sqlbulkcopy,我正在使用SqlBulkCopy将记录从电子表格导入SQL Server数据库 大容量复制操作在大多数情况下都可以正常工作。然而,它正在做一些我无法理解的事情 我在我的列映射中定义了一个列: bCopy.ColumnMappings.Add("Amount", "Amount"); 在电子表格中,这是一个varchar,就像在我的工作表中一样(在将数据移动到活动表之前,我导入到工作表以进行一些验证) 当我进行测试时,我进入一个记录并将值从一个数字更改为单词FOO。然后我运行导入 我的验证例程正

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

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

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

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

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

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

我觉得这有点奇怪

如果有什么不同,我将使用OLEDB像访问数据库表一样访问电子表格,并将OLEDBDataReader作为源传入BulkCopy对象

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

编辑


我已经按照建议检查了dataReader——奇怪的是,当我将Amount字段更改为字符串值时,dataReader中的值为null。这是我第一次在Excel datareader中看到这种行为。其他字符串字段工作正常。

我通过向OLEDB连接字符串中添加IMEX=1解决了这个问题。现在,该值显示在datareader中。(我想我需要这样做以支持混合值列)

我通过向OLEDB连接字符串中添加IMEX=1解决了这个问题。现在,该值显示在datareader中。(我想我需要这样做以支持混合值列)

查看读卡器返回的内容来查找。查看读卡器返回的内容来查找。如果其他人阅读此内容,则-IMEX=1在datareader中填充了该值,但它仍然没有进入目标表。最后,我将HDR=YES添加到我的连接字符串中,这最终解决了这个问题。不要问我为什么,但我很高兴我终于让它工作起来了。如果其他人读到了,那么-IMEX=1在datareader中填充了该值,但它仍然没有进入目标表。最后,我将HDR=YES添加到我的连接字符串中,这最终解决了这个问题。别问我为什么,但我很高兴我终于成功了。