在我的ASP.NET应用程序中,我使用经典的ADO 2.8将一些数据保存到Access数据库中。 (或者Jet数据库,对于那些坚持Access只是前端的人来说。)所以我有一个包含一些数据的RecordSet,我想设置一些字段的值,但首先我需要知道字段类型。所以我使用Recordset.Type属性:
Dim fieldType = rs("MyField").Type
这出乎意料地导致错误:用户代码未处理MissingMethodException - 错误:缺少方法'实例valuetype ADODB.DataTypeEnum [MyProjectName] ADODB.Field :: get_Type()'来自类'ADODB.InternalField'。
考虑到.NET本身已经创建了.NET / COM互操作程序集,任何想法为什么?
这是最奇怪的事情:当调试器停止并报告错误并将我带到我的代码中发生的位置时,它具有可以将鼠标悬停在任何变量等上的强大功能。将显示其价值 - 所以我将鼠标悬停在rs("MyField").Type
部分上,并且,看哪,它显示正确的值!
因此,如果它可以在调试时评估它,为什么它会在运行时抛出错误???
提前感谢您的帮助。
答案 0 :(得分:7)
我在VS2010的VB.NET中遇到了这个问题。我不知道ASP.NET,也不知道你正在使用什么版本的Visual Studio,但我通过关闭项目中该COM引用的“嵌入式互操作类型”属性来修复它。我猜这是一个错误。
至于我如何找到解决方案:当代码在主项目中时,它在.NET 3.5中运行良好。当我将“公共”代码分解为独立库,将其转换为4.0,并开始使用“嵌入式互操作类型”时,我开始遇到问题。这意味着三件事之一导致了它:
我碰巧首先尝试#2并修复了它。