. NET MySql ArgumentNullException при открытии в GetCustomAttributes - PullRequest
0 голосов
/ 08 февраля 2020

Я пытаюсь поменять провайдеров баз данных в NET коде на MariaDB. В рамках этого я пытаюсь открыть MySqlConnection. Это, в свою очередь, приводит к выполнению нулевого аргумента с сообщением: «Значение не может быть нулевым. Имя параметра: элемент» и следующий стек вызовов:

    mscorlib.dll!System.Attribute.GetCustomAttributes(System.Reflection.Assembly element, System.Type attributeType, bool inherit) Line 756 C#
    mscorlib.dll!System.Attribute.GetCustomAttribute(System.Reflection.Assembly element, System.Type attributeType, bool inherit) Line 814  C#
    mscorlib.dll!System.Reflection.CustomAttributeExtensions.GetCustomAttribute<System.Runtime.Versioning.TargetFrameworkAttribute>(System.Reflection.Assembly element) Line 27 C#
>   MySql.Data.dll!MySql.Data.MySqlClient.MySqlConnectAttrs.InitFramework() Unknown
    MySql.Data.dll!MySql.Data.MySqlClient.MySqlConnectAttrs.MySqlConnectAttrs() Unknown
    [Native to Managed Transition]  
    [Managed to Native Transition]  
    MySql.Data.dll!MySql.Data.MySqlClient.NativeDriver.SetConnectAttrs()    Unknown
    MySql.Data.dll!MySql.Data.MySqlClient.Authentication.MySqlAuthenticationPlugin.Authenticate(bool reset) Unknown
    MySql.Data.dll!MySql.Data.MySqlClient.NativeDriver.Authenticate(string authMethod, bool reset)  Unknown
    MySql.Data.dll!MySql.Data.MySqlClient.NativeDriver.Open()   Unknown
    MySql.Data.dll!MySql.Data.MySqlClient.Driver.Open() Unknown
    MySql.Data.dll!MySql.Data.MySqlClient.Driver.Create(MySql.Data.MySqlClient.MySqlConnectionStringBuilder settings)   Unknown
    MySql.Data.dll!MySql.Data.Failover.FailoverManager.AttemptConnection(MySql.Data.MySqlClient.MySqlConnection connection, string originalConnectionString, out string connectionString, bool mySqlPoolManager)    Unknown
    MySql.Data.dll!MySql.Data.MySqlClient.MySqlConnection.Open()    Unknown
(My code below this point)

Я использую строку подключения, аналогичную следующей:

<add name="MyMariaDatabase" connectionString="server=myservername.rds.amazonaws.com;port=3306; database=mydb;uid=myuser; pwd=mypassword" providerName="MySql.Data.MySqlClient" />

Пример кода подключения:

using (var client = new MySql.Data.MySqlClient.MySqlConnection(connStr))
{
     client.Open();
     var result = client.ExecuteScalar(someSqlStatement);
}

Все это работает. NET Framework 4.7.2 и MySQL .Data 8.0.19 .

Есть идеи, что не так? Ошибка кажется глубоко внутри фреймворка, и она не дает мне полезной информации.

Ответы [ 2 ]

1 голос
/ 08 февраля 2020

Вы столкнулись с ошибкой 95242 , известной проблемой в Oracle 'MySQL Connector /NET (он же MySql.Data).

Я бы порекомендовал перейти на MySqlConnector , клиентская библиотека OSS MySQL и MariaDB. Наряду с исправлением многих ошибок в Connector /NET и добавлением истинной асинхронной c поддержки ввода / вывода, она не зависит от Oracle, поэтому она поддерживает такие функции MariaDB c, как плагин аутентификации GSSAPI и пакетная поддержка .

0 голосов
/ 08 февраля 2020

Ваш порт должен быть разделен точкой с запятой.

Вместо

"server=myservername.rds.amazonaws.com,3306; database=mydb;uid=myuser; pwd=mypassword"

используйте эту строку соединения

"Server=myservername.rds.amazonaws.com;Port=3306;Database=mydb;Uid=myuser;Pwd=mypassword;"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...