2013-10-24 103 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编译器通过在同一个解决方案中引用编译版本和源代码而变得困惑。

相关问题