103 lines
3.6 KiB
C#
103 lines
3.6 KiB
C#
using MySql.Data.MySqlClient;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace ZKuP
|
|
{
|
|
internal class MySqlConnectionChecker
|
|
{
|
|
public class ConnectionResult
|
|
{
|
|
public bool IsConnected { get; set; }
|
|
public string Message { get; set; }
|
|
public TimeSpan ResponseTime { get; set; }
|
|
public Exception Exception { get; set; }
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Überprüft die Verbindung zu einem MySQL Server asynchron
|
|
/// </summary>
|
|
/// <param name="connectionString">MySQL Connection String</param>
|
|
/// <param name="timeoutSeconds">Timeout in Sekunden (Standard: 10)</param>
|
|
/// <returns>Task mit ConnectionResult</returns>
|
|
public static async Task<ConnectionResult> CheckConnectionAsync()
|
|
{
|
|
var result = new ConnectionResult();
|
|
var startTime = DateTime.Now;
|
|
|
|
try
|
|
{
|
|
using (var connection = new MySqlConnection(SQL.GetConnstr(true)))
|
|
{
|
|
await connection.OpenAsync();
|
|
|
|
// Teste mit einer einfachen Abfrage
|
|
using (var command = new MySqlCommand("SELECT 1", connection))
|
|
{
|
|
var testResult = await command.ExecuteScalarAsync();
|
|
|
|
if (testResult != null && testResult.ToString() == "1")
|
|
{
|
|
result.IsConnected = true;
|
|
result.Message = "Verbindung erfolgreich hergestellt";
|
|
}
|
|
else
|
|
{
|
|
result.IsConnected = false;
|
|
result.Message = "Verbindung hergestellt, aber Testabfrage fehlgeschlagen";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (MySqlException ex)
|
|
{
|
|
result.IsConnected = false;
|
|
result.Exception = ex;
|
|
result.Message = GetMySqlErrorMessage(ex);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
result.IsConnected = false;
|
|
result.Exception = ex;
|
|
result.Message = $"Unerwarteter Fehler: {ex.Message}";
|
|
}
|
|
|
|
result.ResponseTime = DateTime.Now - startTime;
|
|
return result;
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// Gibt eine benutzerfreundliche Fehlermeldung basierend auf MySQL-Fehlercodes zurück
|
|
/// </summary>
|
|
private static string GetMySqlErrorMessage(MySqlException ex)
|
|
{
|
|
switch (ex.Number)
|
|
{
|
|
case 0:
|
|
return "Verbindung zum MySQL-Server konnte nicht hergestellt werden. Überprüfen Sie die Serveradresse.";
|
|
case 1042:
|
|
return "MySQL-Server ist nicht erreichbar. Überprüfen Sie die Netzwerkverbindung.";
|
|
case 1045:
|
|
return "Zugriff verweigert. Überprüfen Sie Benutzername und Passwort.";
|
|
case 1049:
|
|
return "Die angegebene Datenbank existiert nicht.";
|
|
case 1130:
|
|
return "Host ist nicht berechtigt, sich mit dem MySQL-Server zu verbinden.";
|
|
case 2003:
|
|
return "MySQL-Server ist nicht erreichbar oder läuft nicht.";
|
|
default:
|
|
return $"MySQL-Fehler ({ex.Number}): {ex.Message}";
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|