我最近有一個運行時錯誤的麻煩: -選項嚴格On不允許從「ADODB.Recordset」到隱式轉換「ADODB.Recordset」
Could not load type 'ADODB.FieldsToInternalFieldsMarshaler' from assembly my_assembly
這我努力與糾正給出的建議here,here和here。但是,這樣做(設置Embed Interop Types=false
,Copy 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
(爲簡潔起見,省略錯誤處理)。
這個錯誤(第二個)肯定是好奇的。你能否發佈更多相關的代碼,以便我們可以複製你的條件?什麼是my_record_set的類型?有一件事是數據庫連接錯誤(你提到的第一個錯誤),另一個錯誤是類型轉換錯誤(第二錯誤)。 – varocarbas
@varocarbas,我已經添加了一個代碼示例。但是我想知道編譯錯誤是否是一個紅鯡魚,並且問題可能在於'Embed Interop Types'等設置。 –
你的代碼似乎沒問題(它執行OK)。你提到的錯誤(第二個......雖然不知道你在哪裏準確地使用演員)是非常奇怪的,因此表明事情不太正確。我不知道該說什麼......我無法複製你的條件。 – varocarbas