使用经典ADO的Recordset.Type属性的MissingMethodException

时间:2011-04-17 06:17:15

标签: asp.net vb.net com-interop

在我的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部分上,并且,看哪,它显示正确的值!

因此,如果它可以在调试时评估它,为什么它会在运行时抛出错误???

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:7)

我在VS2010的VB.NET中遇到了这个问题。我不知道ASP.NET,也不知道你正在使用什么版本的Visual Studio,但我通过关闭项目中该COM引用的“嵌入式互操作类型”属性来修复它。我猜这是一个错误。


至于我如何找到解决方案:当代码在主项目中时,它在.NET 3.5中运行良好。当我将“公共”代码分解为独立库,将其转换为4.0,并开始使用“嵌入式互操作类型”时,我开始遇到问题。这意味着三件事之一导致了它:

  1. .NET 4.0的行为与.NET 3.5不同(我发现它的确如此)
  2. “嵌入式互操作类型”无法正常运行该COM对象(ADO 2.8)
  3. 我在突破中做的事情导致了它
  4. 我碰巧首先尝试#2并修复了它。