我有一些来自此网站CodeProjectLink的代码,用于将数据表转换为记录集。这个代码一直工作正常,直到我改为.NET 4(以前是2),现在当我调用以下行时:
Dim result As New ADODB.Recordset()
result.CursorLocation = ADODB.CursorLocationEnum.adUseClient
Dim resultFields As ADODB.Fields = result.Fields
Dim inColumns As System.Data.DataColumnCollection = inTable.Columns
For Each inColumn As DataColumn In inColumns
' The next line gives the error
resultFields.Append(
inColumn.ColumnName,
TranslateType(inColumn.DataType),
inColumn.MaxLength,
IIf(inColumn.AllowDBNull,
ADODB.FieldAttributeEnum.adFldIsNullable,
ADODB.FieldAttributeEnum.adFldUnspecified),
Nothing)
Next
我得到了这个奇怪的错误:
错误:类'ADODB.InternalFields'中缺少方法'instance void MYDLLNAME ADODB.Fields :: Append(string,valuetype ADODB.DataTypeEnum,int32,valuetype ADODB.FieldAttributeEnum,object)'。
我尝试将我的行改为:
resultFields.Append(inColumn.ColumnName, TranslateType(inColumn.DataType))
但这也给出了同样的错误。 TranslateType函数正确返回ADODB.DataTypeEnum.adVarChar,所以这似乎也有效
答案 0 :(得分:2)
我得到了同样的错误,这就是我发现这个问题的方法。修复程序如下所述。我在vs 2010中有一个应用程序,我必须构建多个记录集,一些是静态的附加字段,一些是从SQL构建字段的。
要避免错误,请执行以下操作:
对于需要追加字段的记录集,请使用 ADOR .Recordset而非 ADODB .Recordset。
ADOR是COM参考“Microsoft ActiveX Data Objects Recordset 2.8 Library”
答案 1 :(得分:0)
对于对此感兴趣的任何人,我设法通过创建一个COM公开的自定义类来保存公共DataTable,我可以从我的VB6应用程序访问。这取消了转换为Recordset的要求,因为我没有进行任何数据绑定等。所以不是所有场景的解决方案,而是在我的情况下做了很好的解决方案。