Проблема с подключением к базе данных 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.
Увеличение времени выполнения запроса ничего не дало, да и логично, что это никак не повлияет...
Простите за корявый код и неструктурированное объяснение проблемы. Буду рад любой подсказке! Повторюсь, код отлично функционировал до переустановки операционки и визуалки.
