Класс не зарегистрирован Ошибка на Visual Studio 2017 с MySQL - PullRequest
1 голос
/ 21 мая 2019

Я перевожу свое автономное приложение Windows Forms, разработанное для VB.NET, с SQL на MySQL, и при этом я использую онлайн-базу данных. Вот сценарий.

  1. Приложение разработано в Visual Studio 2017 VB.NET и представляет собой приложение Windows Forms.
  2. Моя база данных размещена на Hostinger.

Теперь, очевидно, если я хочу подключиться к MySQL из VS, мне нужны два компонента.

  1. MySQL для Visual Studio

  2. Visual Studio MySQL Connector

И тут начинается проблема, я пробовал разные версии обоих компонентов, но все равно получаю следующую ошибку.

enter image description here

Теперь, согласно онлайн-форумам и ответам на вопросы, эта ошибка возникает, когда на машине не установлен программный компонент. В этом случае я использую ссылки MySQL, но MySQL коннектор или MySQL для VS не установлены. Но это не так. У меня установлены оба из них.

Я пытался вручную обновить diff версию MySQL.Data.DLL (v4.0 и v4.5), но, похоже, ничего не решило проблему.

Я попробовал тот же проект с VS 2015 Community, но все еще не работает.

Читайте разные форумы и пробовали несколько решений. Размещение вопроса здесь является своего рода последним средством.

Я думаю, чтобы это работало, должны быть установлены определенные версии обоих поддерживающих программ. Если кто-то пробовал это раньше, работает над этим или есть какие-то обходные пути, дайте мне знать.

И только потому, что название вопроса несколько распространено и упоминается много раз в нескольких сообщениях, просто не дублируйте его без правильного решения.

Дополнительная проблема: MySQL не отображается на сервере Server Explorer список. Это необязательно.

ОБНОВЛЕНИЕ:

Установка MySQL для VS 1.2.7 и MySQL Connector 6.10.5 включит эту опцию в списке серверов в обозревателе сервера. Теперь я могу создать новое соединение MySQL, используя это. Я успешно создал удаленное соединение MySQL и проверил его, но все еще имел ошибку выше, пытаясь запустить проект.

Ответы [ 2 ]

0 голосов
/ 30 мая 2019

Это похоже на ошибку COM.Это всегда радость для отладки.Очевидно, провайдер MySQL .net использует COM под капотом, возможно, для общения с нативным кодом.

У меня нет решения, у меня нет опыта работы с MySQL от .net, и я ненавижу VB сстрасть.Итак, я, вероятно, не ваш спаситель, но вот несколько советов и рекомендаций, которые могут помочь отследить ошибку COM.Это своего рода последнее средство

  1. Загрузите и установите DebugView и Process Monitor от Microsoft.Process Monitor позволяет вам отслеживать доступ к файлам и реестру.DbgView захватывает сообщения журнала от OutputDebugString.Если вам повезет, собственный код MySQL может выдавать строки отладки.
  2. Создайте простое приложение в консольном режиме, которое демонстрирует проблему.
    • Напечатайте загрузочное сообщение, как только запустится ваш основной метод.Включите в сообщение значение Environment.Is64BitProcess (поясните причину ниже)
    • Подождите, пока пользователь нажмет клавишу с помощью Console.ReadKey().Это даст вам время настроить монитор процесса
    • Попробуйте подключиться к MySQL после нажатия клавиши.Окружайте каждый оператор обильным ведением журнала.
    • Настройте Visual Studio так, чтобы она предназначалась только для кода x64, если вы работаете на 64-разрядной машине
  3. Запустите DebugView
  4. ВыполнитьВаше приложение вне отладчика (хотя придерживайтесь сборок Debug)
  5. Пока оно ожидает нажатия клавиши, запустите Process Monitor и скажите, чтобы оно только регистрировало события из вашего приложения
  6. Нажмите клавишув вашем тестовом приложении и посмотрите, не сработает ли оно, как ваше приложение winforms
  7. Предполагая, что оно вылетает, посмотрите на Process Monitor, чтобы увидеть, что происходило в момент сбоя.Там, вероятно, будет гора мусора.Вам придется фильтровать до реестра и доступа к файлам.Сосредоточиться на операциях, которые не удалось.Procmon позволит вам увидеть имя файла и ключи реестра, к которым был получен доступ.
  8. Посмотрите журнал в DebugView и посмотрите, не появилось ли что-нибудь интересное

Хорошо, так зачем форсировать 64 бити лог доказательство того, что вы находитесь в 64-битном режиме во время выполнения?Машина с 64-битным Windows имеет как 64-битный, так и 32-битный реестр.Библиотека COM может быть зарегистрирована в одной, а не в другой.Вы хотите устранить эту головную боль из уравнения.Цель Any CPU в сочетании с настройками Prefer 32-bit VS просто добавляет путаницы ко всему.Лучше всего знать наверняка, на каком целевом процессоре вы работаете, пока вы отлаживаете его.

Другой совет - запустить в отладчике и заставить его «сломать все», когда появится диалоговое окно с этой ошибкой.Я не знаю, появится ли это окно с ошибкой при сбое приложения в консольном режиме, но если это произойдет, стек вызовов может помочь направить вас в правильном направлении.

Последний совет: настройте VS для собственной отладки и скажите, чтобы она работала со всеми типами исключений, а не только с исключениями .NET.

Удачи

0 голосов
/ 23 мая 2019

Если ваше приложение не на платформе 4.6 или выше, вам понадобится устаревший коннектор MySql.Чтобы использовать самую последнюю версию соединителя, удалите все ссылки и импортируйте, закройте Visual Studio, удалите текущий соединитель и MySQL для Visual Studio и установите последнюю версию соединителя.Не устанавливайте MySQL для Visual Studio, он вам не нужен, если вы не разрабатываете приложения с помощью дизайнера.Измените ваш фреймворк на 4.6+ и добавьте ссылку на MySql.Data и импортируйте пространство имен.Если это не решит проблему, я удалю этот ответ.

...