Resolved Bug with CardReader only working once Resolved Bug with Message "Card does not exist", even if it exists
103 lines
3.7 KiB
C#
103 lines
3.7 KiB
C#
using MySql.Data.MySqlClient;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Threading;
|
|
|
|
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; }
|
|
}
|
|
public static async Task<ConnectionResult> CheckConnectionAsync()
|
|
{
|
|
var result = new ConnectionResult();
|
|
var startTime = DateTime.Now;
|
|
|
|
using (var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5)))
|
|
{
|
|
try
|
|
{
|
|
using (var connection = new MySqlConnection(SQL.GetConnstr(true, 1)))
|
|
{
|
|
await connection.OpenAsync(cts.Token);
|
|
|
|
using (var command = new MySqlCommand("SELECT 1", connection))
|
|
{
|
|
var testResult = await command.ExecuteScalarAsync(cts.Token);
|
|
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 (OperationCanceledException) when (cts.Token.IsCancellationRequested)
|
|
{
|
|
result.IsConnected = false;
|
|
result.Message = "Verbindungstest nach 1 Sekunde abgebrochen (Timeout)";
|
|
}
|
|
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}";
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|