2013-10-24 148 views
1

我最近有一個運行時錯誤的麻煩: -選項嚴格On不允許從「ADODB.Recordset」到隱式轉換「ADODB.Recordset」

Could not load type 'ADODB.FieldsToInternalFieldsMarshaler' from assembly my_assembly

這我努力與糾正給出的建議hereherehere。但是,這樣做(設置Embed Interop Types=falseCopy Local=true,並且Isolated=false)已經引起了衆多的編譯錯誤信息: -

Option Strict On disallows implicit conversions from 'ADODB.Recordset' to 'ADODB.Recordset'

當一個記錄被作爲ByRef參數傳遞這些發生。

建議的治療...

CType(my_record_set, ADODB.Recordset) 

導致同一類型,這將可能需要ctypes的無限數量的治癒的另一個錯誤。然而,錯誤信息的Daily-WTF性質以及在做出與項目相關的更改之前完美編譯的事實使我得出結論:代碼不是真正的問題;這與這一輪工作有關。

因此,有誰知道這個工作輪是什麼問題,或者如何解決建議的解決方案導致的編譯錯誤?

EDIT其中誤差本身表現的代碼: -

Dim record_set As ADODB.Recordset = Nothing 
query_string = "some sql-server query" 
db_error = Database.DoQuery(query_string, record_set) ' Error in this line 

其中數據庫類有

Public MustOverride Function DoQuery(
         ByVal query_string As String, _ 
         ByRef record_set As ADODB.Recordset) As DATABASE_ERRORS 

和特定倍率: -

Public Overrides Function DoQuery(
        ByVal query_string As String, _ 
        ByRef record_set As ADODB.Recordset) As DATABASE_ERRORS 
    record_set = New ADODB.Recordset 
    record_set.CursorLocation = ADODB.CursorLocationEnum.adUseClient 
    record_set.Open(query_string, 
        database_connection, 
        ADODB.CursorTypeEnum.adOpenStatic, 
        , 
        ADODB.CommandTypeEnum.adCmdText) 
End Function 

(爲簡潔起見,省略錯誤處理)。

+0

這個錯誤(第二個)肯定是好奇的。你能否發佈更多相關的代碼,以便我們可以複製你的條件?什麼是my_record_set的類型?有一件事是數據庫連接錯誤(你提到的第一個錯誤),另一個錯誤是類型轉換錯誤(第二錯誤)。 – varocarbas

+0

@varocarbas,我已經添加了一個代碼示例。但是我想知道編譯錯誤是否是一個紅鯡魚,並且問題可能在於'Embed Interop Types'等設置。 –

+0

你的代碼似乎沒問題(它執行OK)。你提到的錯誤(第二個......雖然不知道你在哪裏準確地使用演員)是非常奇怪的,因此表明事情不太正確。我不知道該說什麼......我無法複製你的條件。 – varocarbas

回答

1

我來這裏是爲了一個類似的問題,但被引用的庫是我們自己的。我發現解決方案here並刪除對編譯庫的引用爲我解決了它。看起來vb.net編譯器通過在同一個解決方案中引用編譯版本和源代碼而變得困惑。

相關問題