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

Fre*_*red 2 vb.net asp.net adodb com-interop

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

Dim fieldType = rs("MyField").Type
Run Code Online (Sandbox Code Playgroud)

这出乎意料地导致错误:MissingMethodException未被用户代码处理 - 错误:缺少方法'实例valuetype ADODB.DataTypeEnum [MyProjectName] ADODB.Field :: get_Type()'来自类'ADODB.InternalField'.

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

这是最奇怪的事情:当调试器停止并报告错误并将我带到我的代码中它发生的位置时,它具有可以将鼠标悬停在任何变量等上的强大功能,它将显示其价值 - 所以我将鼠标悬停在rs("MyField").Type零件上,并且,看,它显示正确的价值!

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

在此先感谢您的帮助.

小智 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. 我在突破中做的事情引起了它

我碰巧先尝试#2并修复了它.