Странная ошибка при добавлении полей в набор записей в VS2010 после преобразования в .NET 4 - PullRequest
3 голосов
/ 24 февраля 2011

У меня есть некоторый код с этого сайта 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

Я получаю эту странную ошибку:

Ошибка: отсутствует экземпляр метода 'void MYDLLNAME ADODB.Fields :: Append (строка, значение типа ADODB.DataTypeEnum, int32, значение типа ADODB.FieldAttributeEnum, объект)' из класса 'ADODB.InternalFields'.

Я попытался изменить свою строку на просто:

resultFields.Append(inColumn.ColumnName, TranslateType(inColumn.DataType)) 

но это дало ту же ошибку. Функция TranslateType корректно возвращает ADODB.DataTypeEnum.adVarChar, так что это также кажется действительным

Ответы [ 2 ]

2 голосов
/ 12 апреля 2014

Я получил ту же ошибку, как я нашел этот вопрос.Исправление описано ниже.У меня есть приложение в версии 2010, где я должен создать несколько наборов записей, некоторые статические путем добавления полей, некоторые из которых поля построены из SQL.

Чтобы избежать ошибки, выполните следующие действия:

Для наборов записей, где вам необходимо добавить поля, используйте ADOR . Recordset not ADODB .Recordset.

ADOR является ссылкой на COM "MicrosoftБиблиотека записей объектов данных ActiveX 2.8 "

0 голосов
/ 19 июля 2011

Для всех, кто интересуется этим, мне удалось обойти это, создав собственный пользовательский класс COM, который содержит общедоступную таблицу данных, к которой я могу получить доступ из своего приложения VB6.Это устраняет необходимость преобразования в набор записей, поскольку я не выполняю привязку данных и т. Д., Поэтому не является решением для всех сценариев, но в моем случае это хороший надежный обходной путь.

...