Option Strict On禁止从'ADODB.Recordset'到'ADODB.Recordset'的隐式转换

时间:2013-10-24 08:06:50

标签: sql-server vb.net adodb

我最近遇到了运行时错误的问题: -

  

无法从中加载“ADODB.FieldsToInternalFieldsMarshaler”类型   程序集my_assembly

我正在努力纠正hereherehere给出的建议。但是这样做(设置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

(为简洁省略了错误处理)。

1 个答案:

答案 0 :(得分:1)

我来这里遇到类似的问题,但引用的库是我们自己的。我找到了解决方案here并删除了对编译库的引用为我解决了这个问题。似乎vb.net编译器因编译版本和源代码在同一解决方案中引用而感到困惑。