转换为.NET 4后,奇怪的错误将字段附加到VS2010中的记录集

时间:2011-02-24 11:05:02

标签: .net vb.net adodb

我有一些来自此网站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,所以这似乎也有效

2 个答案:

答案 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的要求,因为我没有进行任何数据绑定等。所以不是所有场景的解决方案,而是在我的情况下做了很好的解决方案。