我最近遇到了运行时错误:-
无法从程序集 my_assembly 加载类型“ADODB.FieldsToInternalFieldsMarshaler”
我正在努力纠正这里,这里和这里给出的建议。但是这样做(设置Embed Interop Types=false
、Copy Local=true
和Isolated=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
(为简洁起见,省略了错误处理)。