首页 > 解决方案 > Excel OLEDB 将有效值读取为 DBNull

问题描述

我有一个包含一行双精度值的 excel 文件。它正确验证了前 8 行,但如果第 9 行或更高行中有错误数据,则它将数据类型视为 dbnull 而不是 double。

例如,如果我的列看起来像这样(3 行):

1234.22
1234.55
5555.xyz  

这会将第 3 行视为双精度,并且第 3 行具有字母数字字符

但是,如果我这样做(超过 9 行):

1234
12345
12346
4357676
3456787
3456567
234234
978978
76867.ddd
123942

然后它会将倒数第二行视为 dbNull,其单元格值为“”。但它会再次看到最后一行以其正确的单元格值再次翻倍。

这是我的连接字符串,所以我使用 Imex = 1

string connString = connString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + fileName + ";Extended Properties='Excel 12.0;IMEX=1;'";

经过进一步调查,这是导致问题 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel] 位于注册表 REG_DWORD "TypeGuessRows" 我发现。在注册表中默认为 8。

显然这仅读取前 8 行。我需要能够扫描所有行。

我没有办法在代码中设置它吗?我无法在工作中修改注册表

标签: c#exceloledboledbdatareader

解决方案


推荐阅读