Imports System.Reflection Imports System.Windows.Forms Imports DigitalData.Modules.Logging Namespace Base Public Class BaseErrorHandler Private _LogConfig As LogConfig Private _Logger As Logger Private _Form As Form Private Const UNKNOWN_METHOD = "Unknown Method" Private Const UNKNOWN_FORM = "Unknown Form" Public Sub New(LogConfig As LogConfig, Logger As Logger, Form As Form) _LogConfig = LogConfig _Logger = Logger _Form = Form End Sub Public Sub ShowErrorMessage(Exception As Exception) _Logger.Error(Exception) MessageBox.Show(GetMessage(Exception), _Form.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation) End Sub Public Sub ShowInfoMessage(Text As String) _Logger.Info(Text) MessageBox.Show(Text, _Form.Text, MessageBoxButtons.OK, MessageBoxIcon.Information) End Sub Private Function GetMessage(Exception As Exception) As String Dim oTargetSite = Exception.TargetSite Dim oMethodName = GetMethodName(Exception) Dim oFormName = GetFormName(Exception) Dim oMessage As String = String.Empty If TypeOf Exception Is SqlClient.SqlException Then Dim oNumber As Integer = DirectCast(Exception, SqlClient.SqlException).Number Select Case oNumber Case 2627 oMessage = "Es wurde ein Doppelter Wert in eine Spalte eingetragen, die einzigartig sein muss." End Select ElseIf TypeOf Exception Is NoNullAllowedException Then oMessage = "Einige benötigte Felder wurde nicht ausgefüllt." Else oMessage = $"Es ist ein unerwarteter Fehler in {oFormName}/{oMethodName} aufgetreten. Mehr Informationen finden Sie im Log." End If If _LogConfig.Debug Then oMessage &= vbNewLine & vbNewLine & "== Debug Informationen ==" oMessage &= vbNewLine & vbNewLine & "Die ursprüngliche Fehlermeldung lautet:" oMessage &= vbNewLine & Exception.Message oMessage &= vbNewLine & vbNewLine & "Stacktrace:" oMessage &= vbNewLine & Exception.StackTrace End If Return oMessage End Function 'Private Function GetMessage(Exception As Exception) As String ' Dim oTargetSite = Exception.TargetSite ' Dim oMethodName = GetMethodName(Exception) ' Dim oFormName = GetFormName(Exception) ' Dim oMessage As String = String.Empty ' oMessage &= $"Form: {oFormName}{vbNewLine}" ' oMessage &= $"Method: {oMethodName}{vbNewLine}" ' If Not String.IsNullOrEmpty(Exception.StackTrace) Then ' oMessage &= $"Message: {Exception.Message}{vbNewLine}{vbNewLine}" ' End If ' If Not String.IsNullOrEmpty(Exception.StackTrace) Then ' oMessage &= $"Stacktrace: {Exception.StackTrace}{vbNewLine}" ' End If ' oMessage &= $"{vbNewLine}" ' oMessage &= $"Please report this error to error@digitaldata.works" ' Return oMessage 'End Function Private Function GetMethodName(Exception As Exception) As String Dim oMethodName = Exception.TargetSite?.Name If oMethodName Is Nothing Then Return UNKNOWN_METHOD Else Return oMethodName End If End Function Private Function GetFormName(Exception As Exception) As String Dim oFormName = Exception.TargetSite?.ReflectedType?.Name If oFormName Is Nothing Then Return UNKNOWN_FORM Else Return oFormName End If End Function End Class End Namespace