Imports System.Data.SqlClient Imports System.Reflection Public Class cAuditFlow_Pruefobjekte '=== Properties (Spalten laut Tabelle) === Public Property wartPO_Id As Integer Public Property wartPO_Bezeichnung As String Public Property wartPO_Kennung As String Public Property wartPO_Kategorie As String Public Property wartPO_Firma As String Public Property wartPO_Niederlasung As String Public Property wartPO_StandortId As Integer Public Property wartPO_Aktiv As Boolean = True Public Property wartPO_IntervallTyp As String ' VARCHAR(30) Public Property wartPO_IntervallWert As Nullable(Of Integer) ' NULL Public Property wartPO_Erinnerung_VorlaufInTagen As Integer = 0 ' NOT NULL DEFAULT(0) Public Property wartPO_startdatum As Date = Date.Today ' NOT NULL DEFAULT(getdate()) Public Property wartPO_enddatum As Nullable(Of Date) ' NULL (DEFAULT(getdate()) wenn nicht gesetzt) Public Property wartPO_zustaendigIntern_MaId As Nullable(Of Integer) Public Property wartPO_zustaendigIntern_Name As String Public Property wartPO_zustaendigIntern_Tel As String Public Property wartPO_zustaendigIntern_Mail As String Public Property wartPO_zustaendigExtern_Firma As String Public Property wartPO_zustaendigExtern_Name As String Public Property wartPO_zustaendigExtern_Tel As String Public Property wartPO_zustaendigExtern_Mail As String Public Property wartPO_MailErinnerung_SendenAnIntZust As Boolean = True ' NOT NULL DEFAULT(1) Public Property wartPO_Beschreibung As String '=== Status / Helper === Public hasEntry As Boolean = False Private ReadOnly SQL As New SQL '=== CTORs === Public Sub New(wartPO_Id As Integer) Me.wartPO_Id = wartPO_Id LOAD() End Sub Public Sub New() ' Für neue Datensätze ohne sofortiges LOAD End Sub '=== Parameterliste === Private Function getParameterList() As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) Dim list As New List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) ' PK list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("wartPO_Id", wartPO_Id, , True)) ' Datenfelder list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("wartPO_Bezeichnung", wartPO_Bezeichnung)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("wartPO_Kennung", wartPO_Kennung)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("wartPO_Kategorie", wartPO_Kategorie)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("wartPO_Firma", wartPO_Firma)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("wartPO_Niederlasung", wartPO_Niederlasung)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("wartPO_StandortId", wartPO_StandortId)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("wartPO_Aktiv", wartPO_Aktiv)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("wartPO_IntervallTyp", wartPO_IntervallTyp)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("wartPO_IntervallWert", wartPO_IntervallWert)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("wartPO_Erinnerung_VorlaufInTagen", wartPO_Erinnerung_VorlaufInTagen)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("wartPO_startdatum", wartPO_startdatum)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("wartPO_enddatum", wartPO_enddatum)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("wartPO_zustaendigIntern_MaId", wartPO_zustaendigIntern_MaId)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("wartPO_zustaendigIntern_Name", wartPO_zustaendigIntern_Name)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("wartPO_zustaendigIntern_Tel", wartPO_zustaendigIntern_Tel)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("wartPO_zustaendigIntern_Mail", wartPO_zustaendigIntern_Mail)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("wartPO_zustaendigExtern_Firma", wartPO_zustaendigExtern_Firma)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("wartPO_zustaendigExtern_Name", wartPO_zustaendigExtern_Name)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("wartPO_zustaendigExtern_Tel", wartPO_zustaendigExtern_Tel)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("wartPO_zustaendigExtern_Mail", wartPO_zustaendigExtern_Mail)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("wartPO_MailErinnerung_SendenAnIntZust", wartPO_MailErinnerung_SendenAnIntZust)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("wartPO_Beschreibung", wartPO_Beschreibung)) Return list End Function '=== SAVE: Insert/Update in einer Transaktion === Public Function SAVE() As Boolean Try Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList() Dim sqlstr As String = "BEGIN TRAN " & "IF EXISTS(SELECT * FROM [tblAuditFlow_Pruefobjekte] WHERE [wartPO_Id]=@wartPO_Id) " & "BEGIN " & getUpdateCmd() & " END " & "ELSE " & "BEGIN " & getInsertCmd() & " END " & "COMMIT TRAN " ' MsgBox(sqlstr) Return SQL.doSQLVarList(sqlstr, "ADMIN", , list) Catch ex As Exception ' MsgBox(ex.Message) VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) Return False End Try End Function '=== LOAD: füllt Properties via Reflection aus DataReader === Public Sub LOAD() Try hasEntry = False Using conn As SqlConnection = SQL.GetNewOpenConnectionADMIN() Using cmd As New SqlCommand("SELECT * FROM [tblAuditFlow_Pruefobjekte] WHERE [wartPO_Id]=@wartPO_Id", conn) cmd.Parameters.AddWithValue("@wartPO_Id", wartPO_Id) Using dr = cmd.ExecuteReader() If dr.Read() Then For Each li In getParameterList() ' li.Text = Spaltenname, li.Scalarvariable = Property-Name Dim propInfo As PropertyInfo = Me.GetType().GetProperty(li.Scalarvariable) If propInfo Is Nothing Then Continue For If dr.Item(li.Text) Is DBNull.Value Then propInfo.SetValue(Me, Nothing) Else propInfo.SetValue(Me, dr.Item(li.Text)) End If Next hasEntry = True End If End Using End Using End Using Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try End Sub '=== UPDATE-Kommando dynamisch aus Parameterliste === Private Function getUpdateCmd() As String Try Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList() Dim setParts As New List(Of String) For Each i In list If Not i.isPrimaryParam Then setParts.Add("[" & i.Text & "]=@" & i.Scalarvariable) End If Next Dim setClause As String = String.Join(",", setParts) Return "UPDATE [tblAuditFlow_Pruefobjekte] SET " & setClause & " WHERE [wartPO_Id]=@wartPO_Id" Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) Return "" End Try End Function '=== INSERT-Kommando dynamisch aus Parameterliste === Private Function getInsertCmd() As String Try Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList() Dim cols As New List(Of String) Dim vals As New List(Of String) For Each i In list If Not i.isPrimaryParam Then cols.Add("[" & i.Text & "]") vals.Add("@" & i.Scalarvariable) End If Next Return "INSERT INTO [tblAuditFlow_Pruefobjekte] (" & String.Join(",", cols) & ") VALUES (" & String.Join(",", vals) & ")" Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) Return "" End Try End Function Private Function DELETE_ALL_OPEN_FAELLIGE() As String Try Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList() Dim setParts As New List(Of String) For Each i In list If Not i.isPrimaryParam Then setParts.Add("[" & i.Text & "]=@" & i.Scalarvariable) End If Next Dim setClause As String = String.Join(",", setParts) Return "UPDATE [tblAuditFlow_Pruefobjekte] SET " & setClause & " WHERE [wartPO_Id]=@wartPO_Id" Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) Return "" End Try End Function Public Shared Function LoadAllAktiv() As List(Of cAuditFlow_Pruefobjekte) Dim result As New List(Of cAuditFlow_Pruefobjekte) Try Using conn As SqlConnection = VERAG_PROG_ALLGEMEIN.SQL.GetNewOpenConnectionADMIN() Using cmd As New SqlCommand("SELECT * FROM [tblAuditFlow_Pruefobjekte] WHERE [wartPO_Aktiv]=1", conn) Using dr As SqlDataReader = cmd.ExecuteReader() While dr.Read() Dim obj As New cAuditFlow_Pruefobjekte() For Each li In obj.getParameterList() Dim propInfo As PropertyInfo = obj.GetType().GetProperty(li.Scalarvariable) If propInfo Is Nothing Then Continue For If dr(li.Text) Is DBNull.Value Then propInfo.SetValue(obj, Nothing) Else propInfo.SetValue(obj, dr(li.Text)) End If Next obj.hasEntry = True result.Add(obj) End While End Using End Using End Using Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try Return result End Function End Class