Проблема с подключением к базе данных MySQL в приложении WPF после переустановки Windows

Здравствуйте уважаемые специалисты! Возникла проблема с подключением к MySQL в приложении C#.

Приложение написано на C# и используется WPF. Строку подключения храню в файле конфигураций приложения App.Config. Обращаюсь к ней из класса.

Приложение отлично работало до того момента, пока не пришлось переустановить Windows, и соответственно Visual Studio тоже переустановлена. Исходники проекта никак не менялись. Строка подключения также в первозданном виде. Специально запинговал сервер - все отлично, ответ есть, но ошибка присутствует и никуда ее не денешь. Программа зависает, а далее время ожидания программы истекает и выдается ошибка подключения. Думал, как вариант файервол, но имеется тот момент, что я могу подключится к базе данных из консольного приложения. Проблемы только с WPF. Я использую проект Приложение WPF (.NET Framework).

Может что-то из компонентов или ссылок не доподключил, хотя тогда скорее всего ошибка компиляции была бы. Я в знатном тупике. Надеюсь на хоть какую-то помощь!

Прикрепляю файл настроек:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
    </startup>
    <connectionStrings>
        <add name="DB" connectionString="*************" />
    </connectionStrings>
</configuration>

Строку подключения храню в формате Base64 для самой банальной и минимальной дополнительной защиты.

Класс DataBase:

using MySql.Data.MySqlClient;
using System;
using System.Configuration;
using System.Data;
using System.Text;

namespace EmployeeSystem
{
    internal class DataBase
    {
        private MySqlConnection connection = new MySqlConnection(Encoding.UTF8.GetString(Convert.FromBase64String(ConfigurationManager.ConnectionStrings["DB"].ConnectionString)));

        public void openConnection()
        {
            if (connection.State == ConnectionState.Closed)
            {
                connection.Open();
            }
        }

        public void closeConnection()
        {
            if (connection.State == ConnectionState.Open)
            {
                connection.Close();
            }
        }
        public MySqlConnection GetConnection()
        {
            return connection;
        }
    }
}

У меня есть асинхронный метод в котором я обращаюсь к удаленной базе данных и обычный. Оба завершаются неудачей:

private async Task LoadDataBaseAcync()
{
    string login = "";
    string password = "";

    try
    {
        login = Convert.ToString(textBox1.Text);
        password = hashPassword(Convert.ToString(textBox2.Text));
    }
    catch (Exception)
    {
        MessageBox.Show("Проверьте корректность введенных данных!", "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
    }

    bool hasStrings = false;
    int employeeId = 0;
    bool adminRights = false;

    try
    {
        MySqlCommand command = DB.GetConnection().CreateCommand();
        command.CommandText = "SELECT * FROM employees WHERE login = @login AND pass = @password";
        command.Parameters.AddWithValue("@login", login);
        command.Parameters.AddWithValue("@password", password);
        await DB.GetConnection().OpenAsync();

        System.Data.Common.DbDataReader DR = null;
        DR = await command.ExecuteReaderAsync();

        hasStrings = DR.Read();
        if (hasStrings)
        {
            employeeId = Convert.ToInt32(DR["employee_id"]);
            adminRights = Convert.ToBoolean(DR["admin_rights"]);
        }
        
        await DB.GetConnection().CloseAsync();
        
        if (hasStrings) PasswordCameUp(employeeId, adminRights);
        else PasswordDidNotMatch();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Ошибка!", MessageBoxButton.OK, MessageBoxImage.Error);
    }
}

2 метод:

private void Page1_Loaded(object sender, RoutedEventArgs e)
{
    listBox1.Items.Clear();
    
    DB.GetConnection().Open();
    MySqlCommand command = DB.GetConnection().CreateCommand();

    command.CommandText = "SELECT name, status_id FROM goods ORDER BY product_id";
    MySqlDataReader DR = command.ExecuteReader();

    int i = 0;
    while (DR.Read())
    {
        listBox1.Items.Add(DR[0] + "  " + DR[1]);
        //if (Convert.ToInt32(DR[1]) == 2)
        //    listBox1.Items.IndexOf(i).BackColor = Color.Aqua;

        i++;
    }

    DR.Close();
    DB.GetConnection().Close();
}

В обоих происходит остановка на строке открытия соединения: await DB.GetConnection().OpenAsync(); и DB.GetConnection().Open();

Сама ошибка выглядит вот так:

MySql.Data.MySqlClient.MySqlException: "Unable to connect to any of the specified MySQL hosts."
MySqlException: Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.

Ошибка

Увеличение времени выполнения запроса ничего не дало, да и логично, что это никак не повлияет...

Простите за корявый код и неструктурированное объяснение проблемы. Буду рад любой подсказке! Повторюсь, код отлично функционировал до переустановки операционки и визуалки.


Ответы (0 шт):