2011-04-17 52 views
2

在我的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部分上,並且看到它顯示正確的值!

因此,如果它可以在調試時評估它,爲什麼它在運行時拋出錯誤?

在此先感謝您的幫助。

回答

7

我在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