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

问题描述:

在我的ASP.NET应用程序中,我使用传统的ADO 2.8将一些数据保存到Access数据库中。 (或者Jet数据库,对于那些坚持认为Access只是前端的人)。所以我有一个包含一些数据的RecordSet,并且我想为某些字段设置值,但首先我需要知道字段类型。所以,我用的是Recordset.Type属性:MissingMethodException使用经典ADO的Recordset.Type属性

Dim fieldType = rs("MyField").Type 

这意外导致错误:MissingMethodException是由用户代码未处理 - 错误:缺少方法“实例值类型ADODB.DataTypeEnum [MyProjectName] ADODB.Field :: ADODB.InternalField'类中的'get_Type()'。

考虑到.NET本身已经创建了.NET/COM互操作程序集,任何想法为什么?

这里是最奇怪的事情:当调试器停止并报告错误,并把我带到我的代码发生的地方,并且它具有可以将鼠标悬停在任何变量上的特性等,并且它会显示它的价值 - 所以我将鼠标悬停在rs("MyField").Type部分上,并且看到它显示正确的值!

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

在此先感谢您的帮助。

我在VS2010中遇到了VB.NET中的这个问题。我不知道ASP.NET,也不知道你使用的是什么版本的Visual Studio,但是我通过关闭项目中该COM参考的“Embedded Interop Types”属性来修复它。我猜这是一个错误。


,我怎么找到了解决办法:它在.NET 3.5工作正常时的代码是在主项目。当我将“Common”代码分解为独立库时,将其转换为4.0,并开始使用“嵌入式Interop类型”,我开始出现问题。这意味着三两件事之一引起的:

  1. .NET 4.0行为不同于.NET 3.5(这是这样,我发现)
  2. “嵌入互操作类型”不为正常工作COM对象(ADO 2.8)
  3. 东西我在休息做出来导致它

我偶然尝试#2第一和它固定它。

+0

嗯。谢谢。我现在在项目的不同部分,但我必须尽快尝试。你怎么弄出来的? – Fred 2011-07-06 08:21:55

+0

你节省了我的一天。谢谢! – Illidan 2014-12-24 12:06:59