Я переключил свой проект C # с библиотек MySQL ADO.NET на коннектор MySQL, поскольку в библиотеках MySQL была ошибка.

Предыдущий вопрос, связанный с вышеупомянутой проблемой: Вопрос о StackOverFlow

Я использовал документацию MySql Connector в качестве справочника для переключения библиотек.

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

1) MySqlConnection на частной линии MySqlConnection connection;.

Ошибка: представляет открытое соединение с базой данных сервера MySQL. Этот класс не может быть унаследован. Тип MySqlConnection существует как в MySql.Data, так и в MySqlConnector.

2) MySqlException в строке catch (MySqlException ex).

Ошибка: исключение выдается, когда MySQL возвращает ошибку. Этот класс не может быть унаследован. Тип MySqlException существует как в MySql.Data, так и в MySqlConnector.

3) MySqlCommand в строке MySqlCommand cmd = new MySqlCommand();.

Ошибка: представляет инструкцию SQL для выполнения в базе данных MySQL. Этот класс не может быть унаследован. Тип MySqlCommand существует как в MySql.Data, так и в MySqlConnector.

4) MySqlDbType в строке cmd.Parameters.Add("?jobNo", MySqlDbType.VarChar).Value = (values[0]);.

Ошибка: указывает специфичный для MySQL тип данных поля, свойства для использования в MySql.Data.MySqlClient.MySqlParameter. Тип MySqlDbType существует как в MySql.Data, так и в MySqlConnector.

Есть какие-нибудь предложения по устранению вышеуказанных ошибок?

0
Simon 20 Сен 2018 в 03:57

2 ответа

Лучший ответ

Основная ошибка:

Тип MySql Connection существует как в MySql.Data, так и в MySql Connector.

Похоже, что ваш проект ссылается как на MySql.Data.dll, так и на MySqlConnector. Удалите пакет MySql.Data с помощью диспетчера пакетов NuGet и убедитесь, что ссылка MySql.Data.dll удалена из вашего csproj, packages.config и т. Д.

(В расширенных сценариях вы можете использовать extern псевдоним для ссылки на обе библиотеки, но я бы категорически не одобрял его: это может привести к созданию двух пулов соединений, запуску двух потоков очистки и т. д.)

2
Bradley Grainger 20 Сен 2018 в 03:12

Тип MySqlConnection существует как в MySql.Data, так и в MySqlConnector , что указывает на то, что тип присутствует в обеих сборках, что вызывает неоднозначную ссылку. Обычно вы можете просто удалить ссылки MySql.Data.dll с помощью диспетчера пакетов NuGet с помощью команды Uninstall-Package MySql.Data (и удалив все возможные следы этой сборки), тогда проблема со ссылками должна быть решена, но в определенных условиях вы можете выполнить следующие шаги:

  1. Перейдите к ссылочным свойствам и установите псевдоним MySqlConnector для сборки перед всеми операторами using, например extern alias MySqlConnectorAlias; .

  2. Используйте ссылку из псевдонима на шаге (1), например MySqlConnectorAlias::MySql.Data.MySqlClient.MySqlConnection .

  3. (Только для .NET Core) Перед выполнением шагов (1) и (2) отредактируйте файл .csproj, содержащий ChangeAliasesOfStrongNameAssemblies, следующим образом:

    <Project Sdk="Microsoft.NET.Sdk.Web">
    
       <!-- other stuff -->
    
       <Target Name="ChangeAliasesOfStrongNameAssemblies" BeforeTargets="FindReferenceAssembliesForReferences;ResolveReferences">
           <ItemGroup>
               <ReferencePath Condition="'%(FileName)' == 'MySqlConnector'">
                   <Aliases>MySqlConnectorAlias</Aliases>
               </ReferencePath>
           </ItemGroup>
      </Target>
    
      <!-- other stuff -->
    
    </Project>
    
2
Tetsuya Yamamoto 20 Сен 2018 в 03:33