Imports System.Data.SqlClient Imports System.Data.OracleClient Imports System.IO Imports WINDREAMLib Public Class ClassAllgemeineFunktionen Public Function Insert_LogEntry(PROFIL_ID As String, ERR_MSG As String, USR As String) Try If IsNumeric(PROFIL_ID) Then Dim insert As String = "INSERT INTO TBPM_ERROR_LOG (PROFIL_ID, ERROR_MSG, ADDED_WHO) VALUES (" & PROFIL_ID & ", '" & ERR_MSG & "', '" & USR & "')" If ExecuteonMSSQL(insert, MyConnectionString) <> "" Then ClassLogger.Add("Eintrag in Log-Tabelle konnte nicht erstellt werden!!", True) End If End If Catch ex As Exception ClassLogger.Add("Error in Insert_LogEntry: " & ex.Message) End Try End Function Public Function ExecuteonMSSQL(ByVal sqlcommand As String, ConString As String) Try ' die nötigen Variablen definieren Dim Connection As SqlConnection Dim Command As SqlCommand = Nothing Dim DataAdapter As SqlDataAdapter = Nothing ' ConnectionString aufbauen (aus Settings auslesen) Connection = New SqlConnection(ConString) ' Verbindung zur Datenbank aufbauen Try Connection.Open() Catch ex As Exception ' DB-Connection schliessen Me.CloseMssqlDb(Connection) ClassLogger.Add("ExecuteonMSSQL.Connection definieren - Error: " & ex.Message, True) Return "ExecuteonMSSQL.Connection definieren - Error: " & ex.Message End Try ' SQL-Abfrage definieren Try Command = New SqlCommand(sqlcommand, Connection) Catch ex As Exception ClassLogger.Add("ExecuteonMSSQL.sqlcommand definieren - Error: " & ex.Message, True) ' DB-Connection schliessen Me.CloseMssqlDb(Connection) Return "ExecuteonMSSQL.sqlcommand definieren - Error: " & ex.Message End Try ' *** Ausführen des Command *** If Command IsNot Nothing Then Try Command.ExecuteNonQuery() ' DB-Connection schliessen Me.CloseMssqlDb(Connection) Return "" Catch ex As Exception 'bei einem Fehler einen Eintrag in der Logdatei erzeugen ClassLogger.Add("ExecuteonMSSQL.Execute Command - Error: " & ex.Message, True) ClassLogger.Add("Command-Befehl: " & Command.CommandText, True) ' DB-Connection schliessen Me.CloseMssqlDb(Connection) Return "ExecuteonMSSQL.Execute Command - Error: " & ex.Message End Try Else ' kann eintreten, wenn entweder die SQL-Anweisung falsch ist oder wenn die DataConnection nicht richtig aufgebaut werden konnte ' Eintrag in Logdatei machen ClassLogger.Add("ExecuteonMSSQL.SQL-Command ist ungültig. Command-Objekt konnte nicht erstellt werden") Return "ExecuteonMSSQL.SQL-Command ist ungültig. Command-Objekt konnte nicht erstellt werden" End If Catch ex As Exception ' an dieser Stelle sollte jeder unvorhergesehene Fehler der Funktion abgefangen werden ClassLogger.Add("ExecuteonMSSQL.Ein unbekannter Fehler in ExecuteonMSSQL - Error: " & ex.Message, True) Return "ExecuteonMSSQL.Ein unbekannter Fehler in ExecuteonMSSQL - Error: " & ex.Message End Try End Function Private Sub CloseMssqlDb(ByRef Connection As SqlConnection) ' wenn eine Datenbank-Connection aufgebaut ist If Connection IsNot Nothing Then ' diese schliessen Connection.Close() Connection = Nothing End If End Sub Public Function Delete_xffres(originFile As String) Try Dim Stammname As String = System.IO.Path.GetFileNameWithoutExtension(originFile) Dim Path As String = System.IO.Path.GetDirectoryName(originFile) Dim xffres As String = Path & "\" & Stammname & ".xffres" If file_exists(xffres, False) = True Then System.IO.File.Delete(xffres) ClassLogger.Add(">> Datei " & xffres & " erfolgreich gelöscht", False) Return True Else Return Nothing End If Catch ex As Exception ClassLogger.Add(" Fehler bei Delete_xffres", True) ClassLogger.Add(">> Fehlermeldung: " & ex.Message, False) End Try End Function Public Function func_check_file_use(ByVal filename) As Boolean Dim fs As Integer = FreeFile() Dim inuse As Boolean = False If File.Exists(filename) Then Try FileOpen(fs, filename, OpenMode.Binary, _ OpenAccess.ReadWrite, OpenShare.LockReadWrite) Catch inuse = True Finally FileClose(fs) End Try End If Return inuse End Function Public Function Delete_File(originFile As String) Try If file_exists(originFile, False) = True Then System.IO.File.Delete(originFile) ClassLogger.Add(">> Manuelles Löschen: Datei " & originFile & " erfolgreich gelöscht", False) Return True Else MsgBox("Die Datei konnte nicht gelsöcht werden. File NOT EXISTS", MsgBoxStyle.Exclamation) Return False End If Catch ex As Exception ClassLogger.Add(" Fehler bei Delete_File", True) ClassLogger.Add(">> Fehlermeldung: " & ex.Message, False) End Try End Function Public Function Move2Folder(ByVal vMove_File As String, ByVal vZiel_Pfad As String, Profile_ID As Integer) Try If vpdfviewer <> "internal" And vMove_File.EndsWith("pdf") Then Do While func_check_file_use(vMove_File) = True ClassLogger.Add(">> MoveRename: Datei noch geöffnet - Warten", False) System.Threading.Thread.Sleep(500) Loop End If Dim extension As String = IO.Path.GetExtension(vMove_File) Dim Filename As String = IO.Path.GetFileName(vMove_File) Dim path As String = IO.Path.GetDirectoryName(vMove_File) Dim _Ziel As String _Ziel = vZiel_Pfad & "\" & Filename Dim version As Integer = 1 If vZiel_Pfad <> path Then Dim Stammname As String = IO.Path.GetFileNameWithoutExtension(vMove_File) Do While file_exists(_Ziel, False) = True Dim neuername As String = Stammname & "~" & version & extension _Ziel = neuername version = version + 1 Loop My.Computer.FileSystem.MoveFile(vMove_File, _Ziel) ClassLogger.Add(">> Datei erfolgreich verschoben - Ziel: " & _Ziel, False) Else ClassLogger.Add(">> Ziel und Quellpfad sind identisch!", False) End If Return "" Catch ex As Exception ClassLogger.Add(" Fehler bei Move2Folder", True) ClassLogger.Add(">> Fehlermeldung", False) ClassLogger.Add(">>" & ex.Message, False) Insert_LogEntry(Profile_ID, "Fehler bei Move2Folder: " & ex.Message, Environment.UserName) Return ex.Message End Try End Function Public Function file_exists(ByVal _file As String, ByVal suche As Boolean) Try If System.IO.File.Exists(_file) Then Return True Else Return False End If Catch ex As Exception ClassLogger.Add("Fehler in Funktion file_exists - Fehler: ", ex.Message) Return False End Try End Function Public Function checkValue_Exists(sqlbefehl As String, Replace_value As String, Check_value As String, Typ As String, connString As String, profilid As Integer) Try Dim sql As String Dim CONNTYPE As String If connString <> "" Then If connString.StartsWith("%MS") Then CONNTYPE = "MS-SQL" connString = connString.Replace("%MS", "") ElseIf connString.StartsWith("%OR") Then CONNTYPE = "ORACLE" connString = connString.Replace("%OR", "") End If Dim sqlscalar = sqlbefehl Select Case Typ Case "INTEGER" '@manValue sqlscalar = sqlscalar.ToString.Replace(Replace_value, Check_value) Case Else sqlscalar = sqlscalar.ToString.Replace(Replace_value, "'" & Check_value & "'") End Select sql = sqlscalar Dim ergebnis As Integer If CONNTYPE = "ORACLE" Then ergebnis = Execute_Scalar_Oracle(sql, connString, True, profilid) Else ergebnis = Execute_Scalar_SQLServer(sql, connString, True, profilid) End If Select Case ergebnis Case 1 Return True Case Else Return False End Select End If Catch ex As Exception MsgBox("Fehler:" & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Fehler bei checkValue_Exists:") ClassLogger.Add(" - Unvorhergesehener Fehler bei checkValue_Exists - Fehler: " & vbNewLine & ex.Message) Return False End Try End Function Function Execute_Scalar_SQLServer(vsql_statement As String, vconnectionString As String, check As Boolean, profil_id As Integer) Try Dim cnn As SqlConnection cnn = New SqlConnection(vconnectionString) Dim cmd As SqlCommand cnn.Open() cmd = New SqlCommand(vsql_statement, cnn) If check = True Then 'ERgebnis muss immer 1 oder mehr ergeben Dim count As Int32 = Convert.ToInt32(cmd.ExecuteScalar()) If count = 1 Then cmd.Dispose() cnn.Close() Return 1 Else cmd.Dispose() cnn.Close() Return 2 End If Else 'Ergebnis Dim ergebnis As String = cmd.ExecuteScalar() Return ergebnis End If Catch ex As Exception MsgBox("Unvorhergesehener Fehler bei Execute_Scalar_SQLServer" & vbNewLine & "Automatischer Index (j/n): " & check.ToString & vbNewLine & "Fehler:" & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Fehler bei Ausführen sql:") Insert_LogEntry(profil_id, "Unvorhergesehener Fehler bei Execute_Scalar_Oracle: " & ex.Message, Environment.UserName) ClassLogger.Add(" - Unvorhergesehener Fehler bei Execute_Scalar_SQLServer" & vbNewLine & "Automatischer Index (j/n): " & check.ToString & vbNewLine & "Fehler: " & vbNewLine & ex.Message) ClassLogger.Add(" - SQL: " & vsql_statement, False) ClassLogger.Add(" - Connection: " & vconnectionString, False) Return 99 End Try End Function Function Execute_Scalar_Oracle(vsql_statement As String, vconnectionString As String, check As Boolean, profil_id As Integer) Try Dim cnn As System.Data.OleDb.OleDbConnection cnn = New System.Data.OleDb.OleDbConnection(vconnectionString) Dim cmd As System.Data.OleDb.OleDbCommand cnn.Open() cmd = New System.Data.OleDb.OleDbCommand(vsql_statement, cnn) If check = True Then 'Ergebnis muss immer 1 oder mehr ergeben Dim count As Int32 = Convert.ToInt32(cmd.ExecuteScalar()) If count = 1 Then Return 1 Else Return 2 End If Else 'Ergebnis Dim ergebnis As String = cmd.ExecuteScalar() Return ergebnis End If cmd.Dispose() cnn.Close() Catch ex As Exception MsgBox("Unvorhergesehener Fehler bei Execute_Scalar_Oracle" & vbNewLine & "Automatischer Index (j/n): " & check.ToString & vbNewLine & "Fehler:" & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Fehler bei Ausführen sql:") Insert_LogEntry(profil_id, "Unvorhergesehener Fehler bei Execute_Scalar_Oracle: " & ex.Message, Environment.UserName) ClassLogger.Add(" - Unvorhergesehener Fehler bei Execute_Scalar_Oracle" & vbNewLine & "Automatischer Index (j/n): " & check.ToString & vbNewLine & "Fehler: " & vbNewLine & ex.Message) ClassLogger.Add(" - SQL: " & vsql_statement, False) ClassLogger.Add(" - Connection: " & vconnectionString, False) Return 99 End Try End Function End Class