我最近有一个运行时错误的麻烦: -选项严格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