#activex #adodb
#activex #adodb
Вопрос:
Я пытаюсь прочитать объект ADOBD.Recordset таким образом (мой первый раз, так что простите мою «тупость»: D):
Presentation.Category categorySvc = new Presentation.Category();
ADODB.Recordset categories = categorySvc.ListAll("BE", "DUE", "EN", 128);
foreach (var category in categories.Fields) // here is where I get the exception
{
// ...
}
Вызов ListAll работает нормально — я получаю набор записей с некоторыми данными, которые подтверждаю быстрым просмотром объекта. Но когда код достигнет категорий.Полей я получаю следующее исключение:
Не удалось загрузить тип ‘ADODB.FieldsToInternalFieldsMarshaler’ из сборки ‘TestCOMCalls, версия=1.0.0.0, Культура = нейтральная, PublicKeyToken=null’.
Я погуглил эту ошибку (или просто с помощью ‘ADODB.FieldsToInternalFieldsMarshaler’ и не смог найти ничего, что помогло бы мне решить проблему).
Интересно, я пропустил ссылку? Помимо обычных ссылок, я добавил эту в свой проект:
Библиотека ADODB Microsoft ActiveX Data Objects 2.5 C:WINDOWSassemblyGACADODB7.0.3300.0__b03f5f7f11d50a3aADODB.dll
Как я уже сказал, я никогда не делал этого раньше, но, немного погуглив, я смог увидеть, что некоторые люди делают это (например, для объекта.Полей) и, похоже, это работает для них.
Мы высоко ценим любую помощь или указания 🙂
Спасибо!
Ответ №1:
Это указано в отдельных ссылках, а не в свойствах проекта. В окне обозревателя решений откройте «Ссылки» (в разделе проект) и щелкните по соответствующей ссылке. В окне свойств будет доступна опция для встраивания типов взаимодействия (для каждой ссылки).
В Visual BAsic 2010:
Чтобы отключить встроенные типы взаимодействия:
Меню проекта> Показать все файлы, обозреватель решений: > Ссылки: > ADODB > Внедрить Interof types = False. Майкрософт.Офис.Взаимодействие.Доступ> Встраивание между типами = False
Теперь вы сможете публиковать, а также ADODB появится в: Меню проекта> Свойства проекта… ВКЛАДКА Публикации> Файлы приложения
Комментарии:
1. Это помогло и мне. Если мне не изменяет память, CopyLocal был автоматически изменен на True, как только я установил для EmbedInterofTypes значение False, чего я не ожидал.
Ответ №2:
Решаемая:
Обозреватель решений -> Показать все файлы (пункт меню) -> Ссылки -> Adodb -> (свойства) -> Внедрить типы взаимодействия -> False.
Ответ №3:
Посмотрите, что я нашел по этому вопросу здесь. Я ссылался на ваш, но все еще не мог заставить ADODB работать.
Маленький для добавления:
SolutionExplorer —> Просмотреть все файлы. Для ADODB: — Встроить… = False; — Копировать локально = True.
Ответ №4:
Возникла та же проблема в версии 2013, и решение для этого заключается в том, что вы переходите к ссылкам и выбираете ADODB, в свойствах вы увидите Embed Interof types = True, затем измените его на false.
Комментарии:
1. Подробнее: Разверните проект, разверните ссылки, выберите ADODB, щелкните правой кнопкой мыши, выберите Свойства.
Ответ №5:
У меня возникла эта проблема при очистке временного файла (по сравнению с 2017 годом). Решение для этого исключения необходимо изменить Solution Explorer > References > adodb > "Then Right click and choose properties" > Embed Interop Types, set "True" to "False"
Ответ №6:
Хорошо, я понял, как это сделать:
Presentation.Category categorySvc = new Presentation.Category();
ADODB.Recordset categories = categorySvc.ListAll("BE", "DUE", "EN", 128);
categories.MoveFirst();
while(!categories.EOF)
{
var fields = ((dynamic)categories).Fields;
for (int i = 0; i < fields.Count; i )
{
var field = fields[i];
var name = field.Name;
var value = field.Value;
// ...
}
categories.MoveNext();
}