簡體   English   中英

Option Strict On不允許從'ADODB.Recordset'到'ADODB.Recordset'的隱式轉換

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

我最近遇到了運行時錯誤:-

無法從程序集my_assembly加載類型'ADODB.FieldsToInternalFieldsMarshaler'

我正在努力根據此處此處此處給出的建議進行更正。 但是這樣做(設置Embed Interop Types=falseCopy Local=trueIsolated=false )導致了許多編譯錯誤消息:

Option Strict On不允許從'ADODB.Recordset'到'ADODB.Recordset'的隱式轉換

當記錄集作為ByRef參數傳遞時,會發生這些情況。

建議的治療方法...

CType(my_record_set, ADODB.Recordset)

會導致另一個相同類型的錯誤,這大概需要無限數量的CType才能解決。 但是,錯誤消息的Daily-WTF性質以及在進行與項目相關的更改之前可以很好地編譯的事實使我得出這樣的結論:代碼並不是真正的問題。 這與本輪工作有關。

那么,有誰知道工作循環出了什么問題,或者如何解決建議的解決方案導致的編譯錯誤?

編輯錯誤在其中顯示出來的代碼:-

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

(為簡便起見,省略了錯誤處理)。

我來這里的原因是類似的問題,但是所引用的庫是我們自己的。 我在這里找到了解決方案,刪除對編譯庫的引用對我來說解決了。 似乎vb.net編譯器由於在同一解決方案中同時引用了編譯版本和源代碼而感到困惑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM