Проблема с подключением к БД Mysql с эмулятора андроид c# maui
Возникла интересная проблема:
При запуске приложения на Windows Machine подключение к локальной БД MySql и последующий поиск данных выполняется успешно (простая форма авторизации).
Но при развёртывании приложения на эмуляторе Android (Эмулятор закачан через Visual Studio, Pixel 7 Pro, API 31 Android 12) возникают следующие ошибки:
System.TypeInitializationException: 'The type initializer for 'MySql.Data.MySqlClient.MySqlConfiguration' threw an exception.'
Нажимаю "Продолжить":
System.TypeInitializationException: 'The type initializer for 'MySql.Data.MySqlClient.Replication.ReplicationManager' threw an exception.'
Нажимаю ещё раз, вылезает ошибка сверху, потом ещё раз нажимаю, и заканчивается отладка.
С Windows подобных проблем нету.
Мой код:
using MySql.Data.MySqlClient;
using System.Data;
namespace UCLTest
{
public partial class MainPage : ContentPage
{
DB db = new DB();
public MainPage()
{
InitializeComponent();
}
void nameEntry_TextChanged(object sender, TextChangedEventArgs e)
{
var username = nameEntry.Text;
}
void nameEntry_TextChanged2(object sender, TextChangedEventArgs e)
{
var password = nameEntry2.Text;
}
async void LoginButton_Clicked(object sender, EventArgs e)
{
var username = nameEntry.Text;
var password = nameEntry2.Text;
if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password))
{
DisplayAlert("Ошибка", "Пожалуйста, введите логин и пароль", "OK");
return;
}
db.openConnection();
MySqlDataAdapter adapter = new MySqlDataAdapter();
DataTable table = new DataTable();
MySqlCommand command = new MySqlCommand("SELECT * FROM newuserstable WHERE userlogin = @userL AND userpassword = @userP", db.getConnection());
command.Parameters.Add("@userL", MySqlDbType.VarChar).Value = username;
command.Parameters.Add("@userP", MySqlDbType.VarChar).Value = password;
adapter.SelectCommand = command;
adapter.Fill(table);
if (table.Rows.Count > 0)
{
DisplayAlert("Успех", "Вы авторизовались!", "OK");
}
else
{
DisplayAlert("Ошибка", "Неверный логин или пароль", "OK");
}
db.closeConnection();
}
}
}
Это подключение к базе данных:
using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace UCLTest
{
class DB
{
MySqlConnection connection = new MySqlConnection($"server=localhost;port=3306;username=root;password=root;database=ucl");
public void openConnection() => connection.Open();
public void closeConnection() => connection.Close();
public MySqlConnection getConnection() => connection;
}
}
P.s, на табуляцию не обращайте внимание, впервые пишу тут, в коде всё нормально.
Никаких других скриптов с кодом в проекте нету. Установлен только один Nuget пакет MySql.Data
Заранее благодарю всех за уделённое время и возможную помощь!
Ответы (1 шт):
Получилось в выводе увидеть это:
[monodroid-assembly] open_from_bundles: failed to load assembly System.Security.Permissions.dll
Loaded assembly: /data/data/com.companyname.ucltest/files/.__override__/System.Security.Permissions.dll [External]
[monodroid-assembly] open_from_bundles: failed to load assembly System.Configuration.ConfigurationManager.dll
[monodroid-assembly] open_from_bundles: failed to load assembly
System.Collections.Specialized.dll
Loaded assembly: /data/data/com.companyname.ucltest/files/.__override__/System.Configuration.ConfigurationManager.dll [External]
Loaded assembly: /data/data/com.companyname.ucltest/files/.__override__/System.Collections.Specialized.dll [External]
**System.TypeInitializationException:** 'The type initializer for 'MySql.Data.MySqlClient.MySqlConfiguration' threw an exception.'
Проблему удалось решить. Вместо MySql.Data используйте MySqlConnector.