1

我正在运行一些使用 NUnit 用 C#.NET 编写的测试用例(这是在 Visual Studio 2010 上)。我使用的方法从另一个开发团队提供给我的 Excel .xls (2003) 文件中读取用户和地址数据。当我在不更改 Excel 文件的情况下运行测试时,一切正常。如果我更改Excel 文件中的某些值,例如名字或姓氏,或街道地址,它仍然有效。但是,如果我更改邮政编码字段,测试将失败,并且我收到一条错误消息:

“System.ArgumentException:‘System.DBNull’类型的对象无法转换为‘System.Double’类型”

即使我输入完全相同的值也会发生这种情况。换句话说,如果现有的邮政编码值是“ 11111”并且我根本不修改文件,那么当我运行它时测试就可以工作。但是,如果我修改该字段并重新键入“ 11111”,读者会将其视为 NULL 值并引发上述错误。在电子表格的其他行(我没有修改的那些行)中,值返回为“ 11111.0d”并且一切正常,因此读者似乎正在将这些值作为 Double 读取(我不确定为什么) . 但如果我自己输入值,它就不会这样读。

我读过的一篇文章建议IMEX=1在连接字符串中使用以将混合值读取为文本。然而,这并没有奏效。当我添加IMEX=1时,我收到了一条"Could not find installable ISAM"消息。

提前感谢您的帮助。

4

1 回答 1

0

除了在连接字符串中设置 IMEX 模式外,您还可以尝试调整一些 Jet 引擎的注册表设置。

例如,HKEY_LOCAL_MACHINE/Software/Microsoft/Jet/[您的版本]/Engines/Excel/ImportMixedTypes

将此更改为 Text 以使其成为混合类型(例如,文本和数字)的默认导入

HKEY_LOCAL_MACHINE/Software/Microsoft/Jet/[您的版本]/Engines/Excel/TypeGuessRows

将此更改为 0 以强制引擎在选择数据类型之前扫描列中的所有值(否则它只会扫描前 8 行)。

关于“找不到可安装的 ISAM”错误。可能是您的 ISAM 驱动程序的路径无效(请参见此处),但您的连接字符串更有可能出现错误。有关一些正确示例,请参见此处此处

于 2013-04-04T15:33:10.280 回答